機器學習新手必看10大演算法

機器之心發表於2018-02-02

文章選自TowardsDataScience,作者:James Le,機器之心編譯。

本文介紹了機器學習新手需要了解的 10 大演算法,包括線性迴歸、Logistic 迴歸、樸素貝葉斯、K 近鄰演算法等。

在機器學習中,有一種叫做「沒有免費的午餐」的定理。簡而言之,它指出沒有任何一種演算法對所有問題都有效,在監督學習(即預測建模)中尤其如此。

例如,你不能說神經網路總是比決策樹好,反之亦然。有很多因素在起作用,例如資料集的大小和結構。

因此,你應該針對具體問題嘗試多種不同演算法,並留出一個資料「測試集」來評估效能、選出優勝者。

當然,你嘗試的演算法必須適合你的問題,也就是選擇正確的機器學習任務。打個比方,如果你需要打掃房子,你可能會用吸塵器、掃帚或拖把,但是你不會拿出鏟子開始挖土。

大原則

不過也有一個普遍原則,即所有監督機器學習演算法預測建模的基礎。

機器學習演算法被描述為學習一個目標函式 f,該函式將輸入變數 X 最好地對映到輸出變數 Y:Y = f(X)

這是一個普遍的學習任務,我們可以根據輸入變數 X 的新樣本對 Y 進行預測。我們不知道函式 f 的樣子或形式。如果我們知道的話,我們將會直接使用它,不需要用機器學習演算法從資料中學習。

最常見的機器學習演算法是學習對映 Y = f(X) 來預測新 X 的 Y。這叫做預測建模或預測分析,我們的目標是儘可能作出最準確的預測。

對於想了解機器學習基礎知識的新手,本文將概述資料科學家使用的 top 10 機器學習演算法。


1. 線性迴歸

線性迴歸可能是統計學和機器學習中最知名和最易理解的演算法之一。

預測建模主要關注最小化模型誤差或者儘可能作出最準確的預測,以可解釋性為代價。我們將借用、重用包括統計學在內的很多不同領域的演算法,並將其用於這些目的。

線性迴歸的表示是一個方程,它通過找到輸入變數的特定權重(稱為係數 B),來描述一條最適合表示輸入變數 x 與輸出變數 y 關係的直線。

機器學習新手必看10大演算法

線性迴歸

例如:y = B0 + B1 * x

我們將根據輸入 x 預測 y,線性迴歸學習演算法的目標是找到係數 B0 和 B1 的值。

可以使用不同的技術從資料中學習線性迴歸模型,例如用於普通最小二乘法和梯度下降優化的線性代數解。

線性迴歸已經存在了 200 多年,並得到了廣泛研究。使用這種技術的一些經驗是儘可能去除非常相似(相關)的變數,並去除噪音。這是一種快速、簡單的技術,可以首先嚐試一下。


2. Logistic 迴歸

Logistic 迴歸是機器學習從統計學中借鑑的另一種技術。它是解決二分類問題的首選方法。

Logistic 迴歸與線性迴歸相似,目標都是找到每個輸入變數的權重,即係數值。與線性迴歸不同的是,Logistic 迴歸對輸出的預測使用被稱為 logistic 函式的非線性函式進行變換。

logistic 函式看起來像一個大的 S,並且可以將任何值轉換到 0 到 1 的區間內。這非常實用,因為我們可以規定 logistic 函式的輸出值是 0 和 1(例如,輸入小於 0.5 則輸出為 1)並預測類別值。

機器學習新手必看10大演算法

Logistic 迴歸

由於模型的學習方式,Logistic 迴歸的預測也可以作為給定資料例項(屬於類別 0 或 1)的概率。這對於需要為預測提供更多依據的問題很有用。

像線性迴歸一樣,Logistic 迴歸在刪除與輸出變數無關的屬性以及非常相似(相關)的屬性時效果更好。它是一個快速的學習模型,並且對於二分類問題非常有效。


3. 線性判別分析(LDA)

Logistic 迴歸是一種分類演算法,傳統上,它僅限於只有兩類的分類問題。如果你有兩個以上的類別,那麼線性判別分析是首選的線性分類技術。

LDA 的表示非常簡單直接。它由資料的統計屬性構成,對每個類別進行計算。單個輸入變數的 LDA 包括:

  • 每個類別的平均值;

  • 所有類別的方差。

機器學習新手必看10大演算法

線性判別分析

進行預測的方法是計算每個類別的判別值並對具備最大值的類別進行預測。該技術假設資料呈高斯分佈(鐘形曲線),因此最好預先從資料中刪除異常值。這是處理分類預測建模問題的一種簡單而強大的方法。


4. 分類與迴歸樹

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

決策樹模型的表示是一個二叉樹。這是演算法和資料結構中的二叉樹,沒什麼特別的。每個節點代表一個單獨的輸入變數 x 和該變數上的一個分割點(假設變數是數字)。


機器學習新手必看10大演算法

決策樹

決策樹的葉節點包含一個用於預測的輸出變數 y。通過遍歷該樹的分割點,直到到達一個葉節點並輸出該節點的類別值就可以作出預測。

決策樹學習速度和預測速度都很快。它們還可以解決大量問題,並且不需要對資料做特別準備。


5. 樸素貝葉斯

樸素貝葉斯是一個簡單但是很強大的預測建模演算法。

該模型由兩種概率組成,這兩種概率都可以直接從訓練資料中計算出來:1)每個類別的概率;2)給定每個 x 的值,每個類別的條件概率。一旦計算出來,概率模型可用於使用貝葉斯定理對新資料進行預測。當你的資料是實值時,通常假設一個高斯分佈(鐘形曲線),這樣你可以簡單的估計這些概率。

機器學習新手必看10大演算法

貝葉斯定理

樸素貝葉斯之所以是樸素的,是因為它假設每個輸入變數是獨立的。這是一個強大的假設,真實的資料並非如此,但是,該技術在大量複雜問題上非常有用。


6. K 近鄰演算法

KNN 演算法非常簡單且有效。KNN 的模型表示是整個訓練資料集。是不是很簡單?

KNN 演算法在整個訓練集中搜尋 K 個最相似例項(近鄰)並彙總這 K 個例項的輸出變數,以預測新資料點。對於迴歸問題,這可能是平均輸出變數,對於分類問題,這可能是眾數(或最常見的)類別值。

訣竅在於如何確定資料例項間的相似性。如果屬性的度量單位相同(例如都是用英寸表示),那麼最簡單的技術是使用歐幾里得距離,你可以根據每個輸入變數之間的差值直接計算出來其數值。

機器學習新手必看10大演算法

K 近鄰演算法

KNN 需要大量記憶體或空間來儲存所有資料,但是隻有在需要預測時才執行計算(或學習)。你還可以隨時更新和管理訓練例項,以保持預測的準確性。

距離或緊密性的概念可能在非常高的維度(很多輸入變數)中會瓦解,這對演算法在你的問題上的效能產生負面影響。這被稱為維數災難。因此你最好只使用那些與預測輸出變數最相關的輸入變數。


7. 學習向量量化

K 近鄰演算法的一個缺點是你需要遍歷整個訓練資料集。學習向量量化演算法(簡稱 LVQ)是一種人工神經網路演算法,它允許你選擇訓練例項的數量,並精確地學習這些例項應該是什麼樣的。

機器學習新手必看10大演算法

學習向量量化

LVQ 的表示是碼本向量的集合。這些是在開始時隨機選擇的,並逐漸調整以在學習演算法的多次迭代中最好地總結訓練資料集。在學習之後,碼本向量可用於預測(類似 K 近鄰演算法)。最相似的近鄰(最佳匹配的碼本向量)通過計算每個碼本向量和新資料例項之間的距離找到。然後返回最佳匹配單元的類別值或(迴歸中的實際值)作為預測。如果你重新調整資料,使其具有相同的範圍(比如 0 到 1 之間),就可以獲得最佳結果。

如果你發現 KNN 在你的資料集上達到很好的結果,請嘗試用 LVQ 減少儲存整個訓練資料集的記憶體要求。


8. 支援向量機(SVM)

支援向量機可能是最受歡迎和最廣泛討論的機器學習演算法之一。

超平面是分割輸入變數空間的一條線。在 SVM 中,選擇一條可以最好地根據輸入變數類別(類別 0 或類別 1)對輸入變數空間進行分割的超平面。在二維中,你可以將其視為一條線,我們假設所有的輸入點都可以被這條線完全的分開。SVM 學習演算法找到了可以讓超平面對類別進行最佳分割的係數。

機器學習新手必看10大演算法

支援向量機

超平面和最近的資料點之間的距離被稱為間隔。分開兩個類別的最好的或最理想的超平面具備最大間隔。只有這些點與定義超平面和構建分類器有關。這些點被稱為支援向量,它們支援或定義了超平面。實際上,優化演算法用於尋找最大化間隔的係數的值。

SVM 可能是最強大的立即可用的分類器之一,值得一試。


9. Bagging 和隨機森林

隨機森林是最流行和最強大的機器學習演算法之一。它是 Bootstrap Aggregation(又稱 bagging)整合機器學習演算法的一種。

bootstrap 是從資料樣本中估算數量的一種強大的統計方法。例如平均數。你從資料中抽取大量樣本,計算平均值,然後平均所有的平均值以便更好的估計真實的平均值。

bagging 使用相同的方法,但是它估計整個統計模型,最常見的是決策樹。在訓練資料中抽取多個樣本,然後對每個資料樣本建模。當你需要對新資料進行預測時,每個模型都進行預測,並將所有的預測值平均以便更好的估計真實的輸出值。

機器學習新手必看10大演算法

隨機森林

隨機森林是對這種方法的一種調整,在隨機森林的方法中決策樹被建立以便於通過引入隨機性來進行次優分割,而不是選擇最佳分割點。

因此,針對每個資料樣本建立的模型將會與其他方式得到的有所不同,不過雖然方法獨特且不同,它們仍然是準確的。結合它們的預測可以更好的估計真實的輸出值。

如果你用方差較高的演算法(如決策樹)得到了很好的結果,那麼通常可以通過 bagging 該演算法來獲得更好的結果。


10. Boosting 和 AdaBoost

Boosting 是一種整合技術,它試圖整合一些弱分類器來建立一個強分類器。這通過從訓練資料中構建一個模型,然後建立第二個模型來嘗試糾正第一個模型的錯誤來完成。一直新增模型直到能夠完美預測訓練集,或新增的模型數量已經達到最大數量。

AdaBoost 是第一個為二分類開發的真正成功的 boosting 演算法。這是理解 boosting 的最佳起點。現代 boosting 方法建立在 AdaBoost 之上,最顯著的是隨機梯度提升。

機器學習新手必看10大演算法

AdaBoost

AdaBoost 與短決策樹一起使用。在第一個決策樹建立之後,利用每個訓練例項上樹的效能來衡量下一個決策樹應該對每個訓練例項付出多少注意力。難以預測的訓練資料被分配更多權重,而容易預測的資料分配的權重較少。依次建立模型,每個模型在訓練例項上更新權重,影響序列中下一個決策樹的學習。在所有決策樹建立之後,對新資料進行預測,並且通過每個決策樹在訓練資料上的精確度評估其效能。

因為在糾正演算法錯誤上投入了太多注意力,所以具備已刪除異常值的乾淨資料非常重要。


總結

初學者在面對各種機器學習演算法時經常問:「我應該用哪個演算法?」這個問題的答案取決於很多因素,包括:(1)資料的大小、質量和特性;(2)可用的計算時間;(3)任務的緊迫性;(4)你想用這些資料做什麼。

即使是經驗豐富的資料科學家在嘗試不同的演算法之前,也無法分辨哪種演算法會表現最好。雖然還有很多其他的機器學習演算法,但本篇文章中討論的是最受歡迎的演算法。如果你是機器學習的新手,這將是一個很好的學習起點。


相關文章