程凱
分類器的建立及參數(shù)調(diào)整
人類可以根據(jù)散點(diǎn)圖的分布直接給出分類直線所在的位置,但是機(jī)器看不到,也不知道這條分類直線應(yīng)該放在哪里,它只能一點(diǎn)點(diǎn)地將樣本點(diǎn)帶入分段函數(shù)中。如果分段函數(shù)判斷的結(jié)果與實(shí)際類別匹配就說明該直線能夠正確分類;否則不能正確分類,需要修正直線的位置,直到全部樣本帶入后都能正確分類為止。因此,機(jī)器需要具備判斷能力?;诖耍o定判斷規(guī)則,機(jī)器就可以通過自身學(xué)習(xí)迭代出正確的分類直線的位置。
感知器就是訓(xùn)練分類器的一種算法,在分類模型形式確定的情況下,可以通過感知器訓(xùn)練算法獲得模型的參數(shù),進(jìn)而獲得分類器。感知器訓(xùn)練算法本質(zhì)上是一種迭代算法,通過不斷修正參數(shù)減少誤分類的程度。因此,感知器訓(xùn)練算法不同于最小二乘法,感知器訓(xùn)練算法不是一步到位求取模型的參數(shù),是不斷迭代、不斷接近最優(yōu)的分類位置。迭代的快慢依賴于問題的復(fù)雜程度和迭代過程中一些初始參數(shù)和學(xué)習(xí)率的選擇。高中學(xué)生初次接觸迭代算法,要理解迭代算法不能給出一步到位的解析解的原因,應(yīng)先從理解迭代算法出現(xiàn)的實(shí)際必然性出發(fā),也可以結(jié)合實(shí)驗(yàn)的演示,觀察在參數(shù)修正迭代的時(shí)候,分類直線如何不斷擺動(dòng),逼近最佳的分類位置,從感性上理解迭代的思想。
因?yàn)榻⒌氖嵌S坐標(biāo),可以使用一條直線將平面分開。如果是多維的,我們可以使用n-1維將它們分開,這叫作超平面。為了顯示方便,我們以二維為例,需要兩個(gè)點(diǎn)確定一條直線,將數(shù)據(jù)分開。我們?cè)诔踔袑W(xué)過一條直線可以表示為ax+b=y,將這個(gè)移項(xiàng)可以變?yōu)閍x+b-y=0,在這里不表示x和y的對(duì)應(yīng)關(guān)系,而表示已輸入的2個(gè)參數(shù)的關(guān)系,我們可以把y用參數(shù)x代替,那么這個(gè)函數(shù)就變?yōu)閍x-x+b=0,為了能更好地計(jì)算,我們這里可以先學(xué)一點(diǎn)矩陣的構(gòu)成和運(yùn)算。這時(shí)就把它變成[a,-1,1]與[x,x,b]兩個(gè)矩陣的相乘了。我們?cè)谳斎霐?shù)據(jù)的時(shí)候只輸入了2個(gè)變量x和x,我們可以使用np.one人為地制造一個(gè)全為1的數(shù)據(jù)。這樣一個(gè)函數(shù)方程就建立了,然后通過調(diào)整參數(shù)改變方程,最后方程將2組數(shù)據(jù)完全分開。下面是方程的前期建立。
X=np.hstack((np.ones((X.shape[0],1)),X))
w=np.ones((3,1))
注意:參數(shù)的設(shè)置可以使用隨機(jī)方法,使它們的分布符合高斯分布,本次為了更好地觀察數(shù)據(jù)的變化我們將所有參數(shù)設(shè)置為1,使用numpy建立。
調(diào)整參數(shù)使用學(xué)習(xí)率,在課本上介紹的方法是通過計(jì)算真實(shí)值和預(yù)測值的偏差調(diào)整參數(shù),a←a+ηy'x',a←a+ηy'x',b←b+ηy,為了方便計(jì)算這在y值輸入的時(shí)候選取兩類1,-1。
下面是程序代碼,有能力的學(xué)生可以嘗試?yán)斫狻?/p>
初步設(shè)置學(xué)習(xí)率為0.01。使用循環(huán)語句逐漸嘗試,剛開始實(shí)驗(yàn)的次數(shù)為100次,得不到結(jié)果,后將實(shí)驗(yàn)次數(shù)更改為5000,經(jīng)過多次調(diào)試,發(fā)現(xiàn)大約需要1500次左右就可以形成圖像。同時(shí),這里可以學(xué)習(xí)一下循環(huán)語句,判斷語句的使用,重點(diǎn)對(duì)break和continue的講解,以及np.where條件語句的使用。當(dāng)所有的數(shù)據(jù)都完全分類后跳出循環(huán)。
將所有的鳶尾花分類后,權(quán)重的參數(shù)顯示為w[0],w[1],w[2],分別表示a,a,b。參數(shù)帶入直線方程為ax+ax+b=0,變形為matplotlib容易顯示的直線。
設(shè)計(jì)意圖:通過講解可以使學(xué)生更好地理解感知器,感知器其實(shí)屬于線性分類器,對(duì)異?;騿栴}還不能處理。在教學(xué)中增加部分簡單的大學(xué)內(nèi)容(矩陣簡單應(yīng)用),更能激發(fā)學(xué)生學(xué)習(xí)的熱情,使得學(xué)生看待問題的方式發(fā)生改變。并不強(qiáng)調(diào)學(xué)生能看懂代碼,但可以讓學(xué)生調(diào)整部分代碼,更好地理解感知器通過迭代的方法,最后通過matplotlib顯示結(jié)果。
學(xué)習(xí)率分析
提出問題學(xué)習(xí)率或系數(shù)大小應(yīng)該如何選擇,過大過小會(huì)出現(xiàn)什么問題。
通過程序檢測哪個(gè)學(xué)習(xí)率能更快得到收斂,得到分類的結(jié)果。本次從0.1到0.2,步長為0.001,最高分類次數(shù)為5000次,如果能完全分類,則跳出循環(huán),并將學(xué)習(xí)率和次數(shù)添加到list,通過matplotlib顯示檢測結(jié)果。代碼如下:
通過檢測可以發(fā)現(xiàn)當(dāng)學(xué)習(xí)率為0.1630、0.190、0.194時(shí)學(xué)習(xí)次數(shù)為3次,其他學(xué)習(xí)率的學(xué)習(xí)次數(shù)較高。
設(shè)計(jì)意圖:通過實(shí)驗(yàn)的方法能進(jìn)一步了解學(xué)習(xí)率在快速收斂中選擇的重要性。學(xué)習(xí)率過高可能導(dǎo)致發(fā)散,過低則會(huì)導(dǎo)致迭代次數(shù)太多。實(shí)驗(yàn)的嘗試也為高三學(xué)習(xí)導(dǎo)數(shù)作好鋪墊,提高學(xué)生學(xué)習(xí)的積極性。
反思總結(jié)
本次實(shí)驗(yàn)對(duì)從原始鳶尾花數(shù)據(jù)集的觀察、調(diào)用、顯示、分類,讓學(xué)生更好地體會(huì)人工智能中使用python進(jìn)行應(yīng)用,使我們有了更深層次的思考,是否可以使用同樣的方法對(duì)其他東西分類。在高中階段我們已經(jīng)學(xué)了部分知識(shí),在實(shí)驗(yàn)中得到了應(yīng)用,更加深了學(xué)生對(duì)數(shù)學(xué)的學(xué)習(xí)興趣。同時(shí),學(xué)生對(duì)矩陣有了初步的認(rèn)識(shí)。
通過鳶尾花的數(shù)據(jù)分析很好地認(rèn)識(shí)了感知器模型。對(duì)數(shù)據(jù)集的處理及感知器的參數(shù)如何調(diào)整和學(xué)習(xí)率的選擇有了更深的理解。通過matplotlib的顯示,使抽象數(shù)據(jù)可以更為直觀地展示,激發(fā)學(xué)生學(xué)習(xí)的熱情。
當(dāng)然,實(shí)驗(yàn)和代碼編寫過程中也出現(xiàn)了一些不足之處,希望以后能盡力避免并成為借鑒。比如,數(shù)據(jù)集中只能存在-1和+1,如果出現(xiàn)多個(gè)分類要如何使用感知器模型?在高中信息課python學(xué)習(xí)中,只是簡單地對(duì)語言本身的學(xué)習(xí),對(duì)編程理解還是不到位,學(xué)生不能很好地理解程序代碼