歡迎光臨
每天分享高質量文章

【知識】新手必看的十種機器學習演演算法

機器學習領域有一條“沒有免費的午餐”定理。簡單解釋下的話,它是說沒有任何一種演演算法能夠適用於所有問題,特別是在監督學習中。

例如,你不能說神經網路就一定比決策樹好,反之亦然。要判斷演演算法優劣,資料集的大小和結構等眾多因素都至關重要。所以,你應該針對你的問題嘗試不同的演演算法。然後使用保留的測試集對效能進行評估,選出較好的演演算法。

當然,演演算法必須適合於你的問題。就比如說,如果你想清掃你的房子,你需要吸塵器,掃帚,拖把。而不是拿起鏟子去開始挖地。

大的原則

不過,對於預測建模來說,有一條通用的原則適用於所有監督學習演演算法。

機器學習演演算法可以描述為學習一個標的函式 f,它能夠最好地映射出輸入變數 X 到輸出變數 Y。有一類普遍的學習任務。我們要根據輸入變數 X 來預測出 Y。我們不知道標的函式 f 是什麼樣的。如果早就知道,我們就可以直接使用它,而不需要再透過機器學習演演算法從資料中進行學習了。

最常見的機器學習就是學習 Y=f(X) 的對映,針對新的 X 預測 Y。這叫做預測建模或預測分析。我們的標的就是讓預測更加精確。

針對希望對機器學習有個基本瞭解的新人來說,下麵將介紹資料科學家們最常使用的 10 種機器學習演演算法。

1. 線性回歸

線性回歸可能是統計和機器學習領域最廣為人知的演演算法之一。

以犧牲可解釋性為代價,預測建模的首要標的是減小模型誤差或將預測精度做到最佳。我們從統計等不同領域借鑒了多種演演算法,來達到這個標的。

線性回歸透過找到一組特定的權值,稱為繫數 B。透過最能符合輸入變數 x 到輸出變數 y 關係的等式所代表的線表達出來。


線性回歸

例如:y = B0 + B1 * x 。我們針對給出的輸入 x 來預測 y。線性回歸學習演演算法的標的是找到 B0 和 B1 的值。

不同的技巧可以用於線性回歸模型。比如線性代數的普通最小二乘法,以及梯度下降最佳化演演算法。線性回歸已經有超過 200 年的歷史,已經被廣泛地研究。根據經驗,這種演演算法可以很好地消除相似的資料,以及去除資料中的噪聲。它是快速且簡便的首選演演算法。

2. 邏輯回歸

邏輯回歸是另一種從統計領域借鑒而來的機器學習演演算法。

與線性回歸相同。它的目的是找出每個輸入變數的對應引數值。不同的是,預測輸出所用的變換是一個被稱作 logistic 函式的非線性函式。

logistic 函式像一個大 S。它將所有值轉換為 0 到 1 之間的數。這很有用,我們可以根據一些規則將 logistic 函式的輸出轉換為 0 或 1(比如,當小於 0.5 時則為 1)。然後以此進行分類。

邏輯回歸

正是因為模型學習的這種方式,邏輯回歸做出的預測可以被當做輸入為 0 和 1 兩個分類資料的機率值。這在一些需要給出預測合理性的問題中非常有用。

就像線性回歸,在需要移除與輸出變數無關的特徵以及相似特徵方面,邏輯回歸可以表現得很好。在處理二分類問題上,它是一個快速高效的模型。

3. 線性判別分析

邏輯回歸是一個二分類問題的傳統分類演演算法。如果需要進行更多的分類,線性判別分析演演算法(LDA)是一個更好的線性分類方法。

對 LDA 的解釋非常直接。它包括針對每一個類的輸入資料的統計特性。對於單一輸入變數來說包括:

  1. 類內樣本均值

  2. 總體樣本變數

線性判別分析

透過計算每個類的判別值,並根據最大值來進行預測。這種方法假設資料服從高斯分佈(鐘形曲線)。所以它可以較好地提前去除離群值。它是針對分類模型預測問題的一種簡單有效的方法。

4. 分類與回歸樹分析

決策樹是機器學習預測建模的一類重要演演算法。

可以用二叉樹來解釋決策樹模型。這是根據演演算法和資料結構建立的二叉樹,這並不難理解。每個節點代表一個輸入變數以及變數的分叉點(假設是數值變數)

決策樹

樹的葉節點包括用於預測的輸出變數 y。透過樹的各分支到達葉節點,並輸出對應葉節點的分類值。

樹可以進行快速的學習和預測。通常並不需要對資料做特殊的處理,就可以使用這個方法對多種問題得到準確的結果。

5. 樸素貝葉斯

樸素貝葉斯(Naive Bayes)是一個簡單,但是異常強大的預測建模演演算法。

這個模型包括兩種機率。它們可以透過訓練資料直接計算得到:1)每個類的機率;2)給定 x 值情況下每個類的條件機率。根據貝葉斯定理,一旦完成計算,就可以使用機率模型針對新的資料進行預測。當你的資料為實數時,通常假設服從高斯分佈(鐘形曲線)。這樣你可以很容易地預測這些機率。

貝葉斯定理

之所以被稱作樸素貝葉斯,是因為我們假設每個輸入變數都是獨立的。這是一個強假設,在真實資料中幾乎是不可能的。但對於很多複雜問題,這種方法非常有效。

6. K 最近鄰演演算法

K 最近鄰演演算法(KNN)是一個非常簡單有效的演演算法。KNN 的模型表示就是整個訓練資料集。很簡單吧?

對於新資料點的預測則是,尋找整個訓練集中 K 個最相似的樣本(鄰居),並把這些樣本的輸出變數進行總結。對於回歸問題可能意味著平均輸出變數。對於分類問題則可能意味著類值的眾數(最常出現的那個值)。

訣竅是如何在資料樣本中找出相似性。最簡單的方法就是,如果你的特徵都是以相同的尺度(比如說都是英寸)度量的,你就可以直接計算它們互相之間的歐式距離。

K 最近鄰演演算法

KNN 需要大量空間來儲存所有的資料。但只是在需要進行預測的時候才開始計算(學習)。你可以隨時更新並組織訓練樣本以保證預測的準確性。

在維數很高(很多輸入變數)的情況下,這種透過距離或相近程度進行判斷的方法可能失敗。這會對演演算法的效能產生負面的影響。這被稱作維度災難。我建議你只有當輸入變數與輸出預測變數最具有關聯性的時候使用這種演演算法。

7. 學習向量量化

K 最近鄰演演算法的缺點是你需要儲存所有訓練資料集。而學習向量量化(縮寫為 LVQ)是一個人工神經網路演演算法。它允許你選擇需要保留的訓練樣本個數,並且學習這些樣本看起來應該具有何種樣式。

學習向量量化

LVQ 可以表示為一組碼本向量的集合。在開始的時候進行隨機選擇。透過多輪學習演演算法的迭代,最後得到與訓練資料集最相配的結果。透過學習,碼本向量可以像 K 最近鄰演演算法那樣進行預測。透過計算新資料樣本與碼本向量之間的距離找到最相似的鄰居(最符合碼本向量)。將最佳的分類值(或回歸問題中的實數值)傳回作為預測值。如果你將資料調整到相同的尺度,比如 0 和 1,則可以得到最好的結果。

如果你發現對於你的資料集,KNN 有較好的效果,可以嘗試一下 LVQ 來減少儲存整個資料集對儲存空間的依賴。

8. 支援向量機

支援向量機(SVM)可能是最常用並且最常被談到的機器學習演演算法。

超平面是一條劃分輸入變數空間的線。在 SVM 中,選擇一個超平面,它能最好地將輸入變數空間劃分為不同的類,要麼是 0,要麼是 1。在 2 維情況下,可以將它看做一根線,並假設所有輸入點都被這根線完全分開。SVM 透過學習演演算法,找到最能完成類劃分的超平面的一組引數。

支援向量機

超平面和最接近的資料點的距離看做一個差值。最好的超平面可以把所有資料劃分為兩個類,並且這個差值最大。只有這些點與超平面的定義和分類器的構造有關。這些點被稱作支援向量。是它們定義了超平面。在實際使用中,最佳化演演算法被用於找到一組引數值使差值達到最大。

SVM 可能是一種最為強大的分類器,它值得你一試。

9. Bagging 和隨機森林

隨機森林是一個常用並且最為強大的機器學習演演算法。它是一種整合機器學習演演算法,稱作自舉匯聚或 bagging。

bootstrap 是一種強大的統計方法,用於資料樣本的估算。比如均值。你從資料中採集很多樣本,計算均值,然後將所有均值再求平均。最終得到一個真實均值的較好的估計值。

在 bagging 中用了相似的方法。但是通常用決策樹來代替對整個統計模型的估計。從訓練集中採集多個樣本,針對每個樣本構造模型。當你需要對新的資料進行預測,每個模型做一次預測,然後把預測值做平均得到真實輸出的較好的預測值。

隨機森林

這裡的不同在於在什麼地方建立樹,與決策樹選擇最優分叉點不同,隨機森林透過加入隨機性從而產生次優的分叉點。

每個資料樣本所建立的模型與其他的都不相同。但在唯一性和不同性方面仍然準確。結合這些預測結果可以更好地得到真實的輸出估計值。

如果在高方差的演演算法(比如決策樹)中得到較好的結果,你通常也可以透過袋裝這種演演算法得到更好的結果。

10. Boosting 和 AdaBoost

Boosting 是一種整合方法,透過多種弱分類器建立一種強分類器。它首先透過訓練資料建立一個模型,然後再建立第二個模型來修正前一個模型的誤差。在完成對訓練集完美預測之前,模型和模型的最大數量都會不斷新增。

AdaBoost 是第一種成功的針對二分類的 boosting 演演算法。它是理解 boosting 的最好的起點。現代的 boosting 方法是建立在 AdaBoost 之上。多數都是隨機梯度 boosting 機器。

AdaBoost

AdaBoost 與短決策樹一起使用。當第一棵樹建立之後,每個訓練樣本的樹的效能將用於決定,針對這個訓練樣本下一棵樹將給與多少關註。難於預測的訓練資料給予較大的權值,反之容易預測的樣本給予較小的權值。模型按順序被建立,每個訓練樣本權值的更新都會影響下一棵樹的學習效果。完成決策樹的建立之後,進行對新資料的預測,訓練資料的精確性決定了每棵樹的效能。

因為重點關註修正演演算法的錯誤,所以移除資料中的離群值非常重要。

結語

當面對各種機器學習演演算法,一個新手最常問的問題是「我該使用哪個演演算法」。要回答這個問題需要考慮很多因素:(1)資料的大小,質量和型別;(2)完成計算所需要的時間;(3)任務的緊迫程度;(4)你需要對資料做什麼處理。

在嘗試不同演演算法之前,就算一個經驗豐富的資料科學家也不可能告訴你哪種演演算法效能最好。雖然還有很多其他的機器學習演演算法,但這裡列舉的是最常用的幾種。如果你是一個機器學習的新手,這幾種是最好的學習起點。


親愛的讀者朋友們,您們有什麼想法,請點選【寫留言】按鈕,寫下您的留言。


資料人網(http://shujuren.org)誠邀各位資料人來平臺分享和傳播優質資料知識


公眾號推薦:

好又樂書屋,分享有益處,有趣味的內容,傳播正能量。





閱讀原文,更多精彩!

分享是收穫,傳播是價值!


贊(0)

分享創造快樂