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