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

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

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

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

例如,你不能說神經網絡老是比決策樹好,反之亦然。有不少因素在起做用,例如數據集的大小和結構。數據結構

所以,你應該針對具體問題嘗試多種不一樣算法,並留出一個數據「測試集」來評估性能、選出優勝者。機器學習

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

大原則

不過也有一個廣泛原則,即全部監督機器學習算法預測建模的基礎。性能

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

這是一個廣泛的學習任務,咱們能夠根據輸入變量 X 的新樣本對 Y 進行預測。咱們不知道函數 f 的樣子或形式。若是咱們知道的話,咱們將會直接使用它,不須要用機器學習算法從數據中學習。測試

最多見的機器學習算法是學習映射 Y = f(X) 來預測新 X 的 Y。這叫作預測建模或預測分析,咱們的目標是儘量做出最準確的預測。優化

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


1. 線性迴歸

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

預測建模主要關注最小化模型偏差或者儘量做出最準確的預測,以可解釋性爲代價。咱們將借用、重用包括統計學在內的不少不一樣領域的算法,並將其用於這些目的。

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

線性迴歸

例如: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)並預測類別值。

Logistic 迴歸

因爲模型的學習方式,Logistic 迴歸的預測也能夠做爲給定數據實例(屬於類別 0 或 1)的機率。這對於須要爲預測提供更多依據的問題頗有用。

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


3. 線性判別分析(LDA)

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

LDA 的表示很是簡單直接。它由數據的統計屬性構成,對每一個類別進行計算。單個輸入變量的 LDA 包括:

  • 每一個類別的平均值;

  • 全部類別的方差。

線性判別分析

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


4. 分類與迴歸樹

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

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


決策樹

決策樹的葉節點包含一個用於預測的輸出變量 y。經過遍歷該樹的分割點,直到到達一個葉節點並輸出該節點的類別值就能夠做出預測。

決策樹學習速度和預測速度都很快。它們還能夠解決大量問題,而且不須要對數據作特別準備。


5. 樸素貝葉斯

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

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

貝葉斯定理

樸素貝葉斯之因此是樸素的,是由於它假設每一個輸入變量是獨立的。這是一個強大的假設,真實的數據並不是如此,可是,該技術在大量複雜問題上很是有用。


6. K 近鄰算法

KNN 算法很是簡單且有效。KNN 的模型表示是整個訓練數據集。是否是很簡單?

KNN 算法在整個訓練集中搜索 K 個最類似實例(近鄰)並彙總這 K 個實例的輸出變量,以預測新數據點。對於迴歸問題,這多是平均輸出變量,對於分類問題,這多是衆數(或最多見的)類別值。

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

K 近鄰算法

KNN 須要大量內存或空間來存儲全部數據,可是隻有在須要預測時才執行計算(或學習)。你還能夠隨時更新和管理訓練實例,以保持預測的準確性。

距離或緊密性的概念可能在很是高的維度(不少輸入變量)中會瓦解,這對算法在你的問題上的性能產生負面影響。這被稱爲維數災難。所以你最好只使用那些與預測輸出變量最相關的輸入變量。


7. 學習向量量化

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

學習向量量化

LVQ 的表示是碼本向量的集合。這些是在開始時隨機選擇的,並逐漸調整以在學習算法的屢次迭代中最好地總結訓練數據集。在學習以後,碼本向量可用於預測(相似 K 近鄰算法)。最類似的近鄰(最佳匹配的碼本向量)經過計算每一個碼本向量和新數據實例之間的距離找到。而後返回最佳匹配單元的類別值或(迴歸中的實際值)做爲預測。若是你從新調整數據,使其具備相同的範圍(好比 0 到 1 之間),就能夠得到最佳結果。

若是你發現 KNN 在你的數據集上達到很好的結果,請嘗試用 LVQ 減小存儲整個訓練數據集的內存要求。


8. 支持向量機(SVM)

支持向量機多是最受歡迎和最普遍討論的機器學習算法之一。

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

支持向量機

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

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


9. Bagging 和隨機森林

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

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

bagging 使用相同的方法,可是它估計整個統計模型,最多見的是決策樹。在訓練數據中抽取多個樣本,而後對每一個數據樣本建模。當你須要對新數據進行預測時,每一個模型都進行預測,並將全部的預測值平均以便更好的估計真實的輸出值。

隨機森林

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

所以,針對每一個數據樣本建立的模型將會與其餘方式獲得的有所不一樣,不過雖然方法獨特且不一樣,它們仍然是準確的。結合它們的預測能夠更好的估計真實的輸出值。

若是你用方差較高的算法(如決策樹)獲得了很好的結果,那麼一般能夠經過 bagging 該算法來得到更好的結果。


10. Boosting 和 AdaBoost

Boosting 是一種集成技術,它試圖集成一些弱分類器來建立一個強分類器。這經過從訓練數據中構建一個模型,而後建立第二個模型來嘗試糾正第一個模型的錯誤來完成。一直添加模型直到可以完美預測訓練集,或添加的模型數量已經達到最大數量。

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

AdaBoost

AdaBoost 與短決策樹一塊兒使用。在第一個決策樹建立以後,利用每一個訓練實例上樹的性能來衡量下一個決策樹應該對每一個訓練實例付出多少注意力。難以預測的訓練數據被分配更多權重,而容易預測的數據分配的權重較少。依次建立模型,每一個模型在訓練實例上更新權重,影響序列中下一個決策樹的學習。在全部決策樹創建以後,對新數據進行預測,而且經過每一個決策樹在訓練數據上的精確度評估其性能。

由於在糾正算法錯誤上投入了太多注意力,因此具有已刪除異常值的乾淨數據很是重要。


總結

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

即便是經驗豐富的數據科學家在嘗試不一樣的算法以前,也沒法分辨哪一種算法會表現最好。雖然還有不少其餘的機器學習算法,但本篇文章中討論的是最受歡迎的算法。若是你是機器學習的新手,這將是一個很好的學習起點。

相關文章
相關標籤/搜索