陳凱
課程整合是課程改革中的一項重要研究項目,從文字上看,所謂“整合”,就是聯(lián)系不同的部分使之成為整體,或者是將原來分散的部件納入到某個具有特定主題的系統(tǒng)框架中。查閱當(dāng)前文獻(xiàn)資料可知,在多種與信息技術(shù)學(xué)科有關(guān)的課程整合的探索中,利用信息技術(shù)手段促進(jìn)其他學(xué)科教學(xué)的研究和實踐案例可謂是汗牛充棟,而將重點(diǎn)落在信息技術(shù)本學(xué)科核心素養(yǎng)培養(yǎng)方面的課程整合案例頗為稀少,本文嘗試以K近鄰算法為例,談一談在信息技術(shù)學(xué)科內(nèi)實施課程整合以提高教學(xué)效率的策略。
● 虛擬情境:一只尷尬的兔子
這里先介紹一下情境故事里的主角——一只尷尬的兔子。關(guān)心本欄目往期文章的讀者可能會發(fā)現(xiàn),筆者常常編寫和兔子有關(guān)的故事來幫助教學(xué),這是因為在實際的教學(xué)中,筆者傾向于創(chuàng)設(shè)虛擬的、背景連貫的、問題純粹的情境,但在這個具有整體性特點(diǎn)的教學(xué)情境中發(fā)生的事件,與現(xiàn)實世界有著遙相對應(yīng)的同構(gòu)關(guān)系。
故事是這樣的:假設(shè)有若干只兔子,有些是黃色的,有些是灰色的,它們被隨機(jī)安置在了n×n大小的正方形的區(qū)域內(nèi),總共有n的平方個單位空間,每一只兔子占用一個單位空間中的兔子洞,當(dāng)然,也有相當(dāng)多的單位空間內(nèi)是沒有兔子的。然而,有一只介于黃色和灰色之間的咖啡色兔子,它有些尷尬,不知道應(yīng)該加入黃兔子的團(tuán)隊,還是灰兔子的團(tuán)隊,最后它這樣決定,自己周圍哪一種顏色的兔子多,就加入哪個團(tuán)隊。可兔子們?nèi)级阍诙蠢?,看不清其中底?xì)。聰明的咖啡色兔子找來不少白菜,將它們?nèi)拥讲煌亩纯冢靡T洞里的兔子出來一窺究竟,然而,它不僅力氣不大,投擲白菜的準(zhǔn)頭又十分差勁……
● 教學(xué)需求1:體現(xiàn)抽象和編碼的思想
建議在教學(xué)進(jìn)程剛開始的時候,先將目光投向未來的教學(xué)內(nèi)容,看看是否有可能在不同的教學(xué)內(nèi)容之間建立聯(lián)系,而是否能體現(xiàn)出學(xué)科核心素養(yǎng)的培育,就成為如何建立聯(lián)系的主要依據(jù)。
將故事場景抽象和編碼為數(shù)據(jù),這就需要一定的計算思維,如將空的兔子洞編碼為0,有黃兔子的洞編碼為1,有灰兔子的洞編碼為2,咖啡色兔子編碼為3。在一般的K近鄰算法中,大多使用標(biāo)簽加特征值的做法來存儲數(shù)據(jù),以兔子的故事為例,存儲結(jié)構(gòu)大致如左表所示。
而本文的例子中,是用二維空間列表的數(shù)值,代表每個空間的狀態(tài):0表示沒有兔子,1表示黃兔子,2表示灰兔子,3表示咖啡色兔子。下面是建立這個列表的Python代碼:
bunny=[[0 for col in range(25)] for row in range(25)]
bunny[6][10]=1
bunny[7][8]=1
bunny[10][8]=2
bunny[10][16]=2
#這里略過更多兔子分布情況
這樣做的用意是,能比較直觀地在抽象符號和空間形象之間保留聯(lián)系,有助于學(xué)習(xí)者逐漸熟悉如何組織數(shù)據(jù)使之成為反映某種“現(xiàn)實”的模型。這里的“現(xiàn)實”打上了引號,是因為例子中這些數(shù)據(jù)所反映的兔子世界是一個簡單純粹的虛擬世界。盡管如此,虛擬的兔子世界其實可以直接與多種現(xiàn)實需求建立起密切的聯(lián)系,如圖像處理、數(shù)據(jù)分析等;一個虛擬世界還可以作為抽取自然客觀世界特征的一個中介,如機(jī)器學(xué)習(xí)中常將某觀察對象的特征值的關(guān)系投射到幾何空間中。另外值得注意的是,為“現(xiàn)實”建立數(shù)據(jù)模型,計算機(jī)科學(xué)的方法與傳統(tǒng)數(shù)學(xué)方法相比較有其獨(dú)特性,可以看成是數(shù)學(xué)方法的一個子集。
可以將列表中所有數(shù)據(jù)打印出來觀察,兔子如何分布可以由用戶自行通過改變列表數(shù)據(jù)來決定。例如,某兔子世界分布情況如圖1所示,為清晰起見,數(shù)據(jù)0打印為空格,生成此圖的程序代碼非常簡單,這里就不列出了。
在信息技術(shù)教學(xué)的許多階段,都可以借助與兔子世界有類似場景的例子來展開教學(xué),體現(xiàn)抽象和編碼的思想。例如,在信息數(shù)字化的教學(xué)內(nèi)容中,可以用兔子顏色狀態(tài)的組合來作為圖像存儲的數(shù)據(jù);在數(shù)據(jù)壓縮的教學(xué)內(nèi)容中,可以用兔子顏色狀態(tài)的變化來實現(xiàn)壓縮;在程序算法模塊中,可以用這個例子來講解數(shù)據(jù)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用;在人工智能的學(xué)習(xí)中,可以用這個例子來講解K近鄰算法,加以變化后還可以用來講解決策樹、K均值等算法等。
● 教學(xué)需求2:體現(xiàn)模擬與仿真的思想
常用的K近鄰算法的思路很簡單,對于等待判定類別的對象來說,需要在已有(訓(xùn)練)數(shù)據(jù)集中找到與該對象最鄰近的K個實例,如果這K個實例的多數(shù)屬于某個類,就把該判別對象歸到這個類。相關(guān)詳細(xì)過程和代碼很容易在網(wǎng)絡(luò)上找到,這里不再贅述。
但兔子世界的情境設(shè)定有其特殊性,對咖啡色兔子來說,除非將其他兔子洞里的兔子引出洞口,不然它是無法知曉每個單位空間中兔子的狀況的,也就是說,它沒有如圖1所示的那樣的全局視角。這只咖啡色兔子只是隨意拋擲白菜,假設(shè)兔子力氣有限,那么越是接近自己的空間,被投擲到的次數(shù)越多,越是距離遠(yuǎn)的空間,被投擲到的次數(shù)越少,為了控制投擲距離,可以利用呈正態(tài)分布的隨機(jī)函數(shù)。這里其實用到了蒙特卡洛法,投擲次數(shù)越多,結(jié)果也越準(zhǔn)確。程序代碼如下頁圖2所示。
從程序代碼中可以看出,咖啡色兔子一共投擲了500次,由于隨機(jī)函數(shù)的作用,每次結(jié)果數(shù)據(jù)都不一樣,但灰兔子更多的結(jié)果是顯然的。其實,即便將投擲次數(shù)減少為50次,在大部分情況下,也能得到應(yīng)當(dāng)歸類為灰色兔子的結(jié)果。
所以說,程序代碼結(jié)合了K近鄰算法和蒙特卡洛法兩者的特征。一方面,程序執(zhí)行過程和行為密切相關(guān),很大程度上降低了理解上的難度;另一方面,代碼中提供了不少供學(xué)習(xí)者調(diào)整變化的地方,如改變兔子的分布情況、改變循環(huán)次數(shù)、改變正態(tài)分布的標(biāo)準(zhǔn)差等。這其實就是一個通過模擬和仿真來進(jìn)行研究并獲得結(jié)果的過程。
● 教學(xué)需求3:體現(xiàn)迭代和自動化的思想
這個情境稍作修改,就可以用在K均值算法的教學(xué)上,K均值算法的思路和一般解決方法,也很容易在網(wǎng)絡(luò)上找到,這里不再贅述。
假設(shè)兔子世界里所有的兔子都是咖啡色的,但它們自己想要根據(jù)如圖3所示的空間分布情況分成黃兔子組和灰兔子組,而在缺少全局視角的情況下,兔子自己是不知道該怎么分類的,那么根據(jù)K均值算法的思路,同樣可以采用隨意扔白菜的方法來進(jìn)行歸類,而先前任務(wù)中的大部分程序代碼可以直接應(yīng)用到新的任務(wù)中。限于篇幅,這里不列出相關(guān)程序代碼,如有需要可向作者發(fā)送郵件索取。初始時,所有咖啡色兔子在空間上的分布情況如圖3所示。雖然人眼一望便知分類結(jié)果,但兔子自己是不知道的。
解決問題的思路很簡單,先在任意位置添加兩只兔子,它們分別是可以四處活動的黃兔子隊長(用字母a表示)和灰兔子隊長(用字母b表示),兩位隊長輪流扔白菜若干次,被黃兔子隊長砸中的兔子歸黃兔子組,被灰兔子隊長砸中的兔子歸灰兔子組。在第一輪投擲結(jié)束后,黃兔子組的成員和灰兔子組的成員可以初步確定下來,但仍然有部分兔子沒有被歸類,由于隨機(jī)函數(shù)的作用,黃兔子偶爾也可能拉攏到較遠(yuǎn)的兔子,灰兔子也是這樣。第一輪投擲結(jié)束后情況如圖4所示。
根據(jù)K均值算法,接下來,兩位隊長應(yīng)該盡量站到自己組員中間的位置,然后再進(jìn)一步收服周邊兔子歸入己方隊伍,這樣反復(fù)迭代后,每只兔子所屬團(tuán)隊就越來越清晰了。很顯然,將同樣方法反復(fù)應(yīng)用于數(shù)據(jù)并由逐步迭代得出結(jié)果的做法體現(xiàn)出計算思維中形式化和自動化的思想。程序執(zhí)行變化情況如圖5所示。
在程序運(yùn)行中,迭代的過程頗有趣味性,因為隨機(jī)函數(shù)的存在,難免會有極個別的兔子臨時“叛變”到對方的團(tuán)隊中,要解決這個問題,可以逐漸收縮隨機(jī)函數(shù)正態(tài)分布的標(biāo)準(zhǔn)差,這樣就可以提高分類效果了,這也就使得算法有進(jìn)一步改進(jìn)的潛力,可供學(xué)習(xí)者深入探索。
本文所介紹任務(wù)情境,形式上將多個處于不同階段的信息技術(shù)教學(xué)內(nèi)容整合在了一起,同時,也始終將如何落實計算思維培養(yǎng)作為教學(xué)設(shè)計的主要需求,希望能對大家有所啟發(fā),從而設(shè)計出更多更好的教學(xué)情境和活動任務(wù)。