本節書摘來自華章社群《r語言機器學習:實用案例分析》一書中的第2章,第2.2節機器學習算法,作者[印度] 拉格哈夫·巴利(raghav bali)迪潘簡·撒卡爾(dipanjan sarkar),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
2.2 機器學習算法
目前為止,我們已經大緻了解了機器學習。我們了解了機器學習的定義是指,計算機程式在經驗e形式的資料的幫助下,改進其性能p,進而學習了任務t。我們還看到,由于沒有一步一步執行的代碼,而是讓程式形成對問題的了解,進而幫助我們解決問題,是以機器學習與傳統的程式範式是不同的。更讓我們驚訝的是,這樣的一個程式就工作在我們面前。
一直以來,雖然我們學習了機器學習的概念,但是我們仍将這個神奇的計算機程式當作一個幫助我們學習和解決問題的神秘黑匣子。現在是讓我們揭曉謎底,探究面紗下這些神奇算法的時候了。
我們将從機器學習中最常見和最廣泛使用的一些算法開始,探究它們複雜的細節和應用,以及少量必需的數學原理。通過本章,你将了解不同的算法類别。這裡給出的算法清單并不詳盡,盡管對一些算法進行了很詳細的解釋,對每一個算法的深刻理論了解超出了本書的範圍。有大量有關機器學習的資料可以容易地從書籍、線上課程、部落格等諸多的管道擷取。
感覺機
這個算法就像機器學習領域中的hello world算法。這或許是所有算法中最易于了解和使用的算法,但這并不意味着這個算法不強大。
感覺機(perceptron)算法由frank rosenblatt于1958年提出,由于它找到了可分類資料的分類器(separator)而受到了極大的關注。
感覺機是一個函數(或者精确地說,一個簡單化的神經元),它将一個實數向量作為輸入,并生成一個實數作為輸出。
在數學上,感覺機可以表示為以下形式:
y = f(w1x1 + w2x2 + … + wnxn + b)= f(wtx + b)
這裡,w1,…,wn表示權重,b是一個表示偏差(或誤差)的常數項,x1,…,xn是輸入,y是函數f的輸出,函數f稱為激活函數。
感覺機算法如下所示:
1)用小的随機數作為權重向量w和誤差項b的初始值。
2)基于函數f和向量x計算輸出向量y。
3)通過更新權重向量w和誤差項b來校正偏差。
4)重複步驟2和3,直到沒有偏差或将誤差減小到一個給定的範圍内。
感覺機算法嘗試找到一種分類器,通過應用稱為訓練集(訓練集對應上一節中機器學習定義中的經驗e)的帶标簽的資料集,将輸入資料分為兩個類。該算法通過随機數設定初值權重向量w和誤差項b。然後通過函數f對輸入資料進行處理,給出向量y。然後将這個生成的輸出y與訓練集中正确的輸出值進行比較,并對權重向量w和誤差項b進行相應的調整。為了了解向量調整過程,假設存在點p1,其正确的輸出值是+1。現在,假如感覺機将p1錯誤地分類為-1,為了正确地對p1進行分類,感覺機将向量w和誤差項b向p1方向進行微小的移動(為防止突然的跳躍,移動将受到學習率的限制)。當找到正确的分類器或者将偏差限定在一個使用者給定的特定範圍内時,算法将停止。
現在讓我們通過一個簡單的例子來了解感覺機算法是如何運作的。
為了讓感覺機算法工作,我們需要一個線性可分的資料集。假定資料通過下式生成:
x2 = x1 + 1/2
基于上式,正确的分類器由下式給出:

現在是時候訓練感覺機了!
感覺機找到正确分類器的工作方式示意圖。正确的分類器用黑色表示
上面的圖形給出了感覺機的訓練狀态。每一個錯誤的分類器用一根灰色線表示。如圖所示,在找到用黑色線辨別正确的分類器後,感覺機停止運算。
最後的分類器的放大視圖如下所示。
https://yqfile.alicdn.com/bdeab76a1c1d72f6f138a345bde57faee3fd9ad1.png" >