編者按:Medium博主James Le近日在網(wǎng)絡(luò)上分享了他認(rèn)為的最適合新手的機器學(xué)習(xí)算法,并授權(quán)論智進行編譯。以下是我們對原文的編譯,如有錯誤還請指出。
在機器學(xué)習(xí)界,有這樣一個“沒有免費午餐”的定理。簡單地說,該理論認(rèn)為,沒有一種算法能解決所有問題,尤其對監(jiān)督學(xué)習(xí)而言。
例如,你不能認(rèn)為神經(jīng)網(wǎng)絡(luò)總比決策樹要好,或決策樹永遠優(yōu)于神經(jīng)網(wǎng)絡(luò)。這其中還有許多因素需要考慮,比如你的數(shù)據(jù)量大小和數(shù)據(jù)結(jié)構(gòu)。
這樣就導(dǎo)致我們在面對一個問題時需要嘗試不同的算法,同時還要用測試的數(shù)據(jù)集來評估算法的性能,選出最合適的那一種。
當(dāng)然,你所選的算法必須適合你的問題,就像當(dāng)我們需要清理房子的時候,可以使用吸塵器、掃把或拖把,但不會用鏟子來挖地。
首要原則
然而,在為監(jiān)督式機器學(xué)習(xí)創(chuàng)建預(yù)測模型之前,要記得一條最重要的原則:
機器學(xué)習(xí)算法可以看做學(xué)習(xí)一種目標(biāo)函數(shù)(f),該函數(shù)是輸入變量(X)到輸出變量(Y)的完美映射:Y=f(X)
這是一個通用的學(xué)習(xí)任務(wù),我們希望用新輸入的變量(X)能輸出預(yù)測變量(Y)。我們不知道函數(shù)(f)是什么樣子的,或者什么形式的。如果我們知道的話就直接使用了,不需要再用機器學(xué)習(xí)算法從大量的數(shù)據(jù)中學(xué)習(xí)它。
最常見的機器學(xué)習(xí)類型是學(xué)習(xí)映射Y=f(X),用它來預(yù)測Y的值。這被稱為預(yù)測建模或預(yù)測分析,我們的目標(biāo)是做出最準(zhǔn)確的預(yù)測。
對于想了解機器學(xué)習(xí)基礎(chǔ)知識的新手,以下是數(shù)據(jù)科學(xué)家最常用的10種機器學(xué)習(xí)算法。
1.線性回歸
線性回歸也許是數(shù)據(jù)科學(xué)和機器學(xué)習(xí)中最知名、最好理解的算法了吧。
預(yù)測建模主要關(guān)注的是,以可解釋性為基礎(chǔ),將模型的誤差降到最小并盡量作出最準(zhǔn)確的預(yù)測。我們將借鑒、多次使用甚至“竊取”包括數(shù)據(jù)統(tǒng)計在內(nèi)的多個不同領(lǐng)域的算法,從而達到這一目的。
線性回歸用方程表示,通過找到作為輸入變量的系數(shù)(B)的特定權(quán)重來描述輸入變量(x)和輸出變量(y)之間的一條線。
線性回歸
例如:y=B0 + B1*x
給定x的值,我們將預(yù)測y的值。同時線性回歸學(xué)習(xí)算法的目標(biāo)是找到系數(shù)B0和B1的值。
想從數(shù)據(jù)中建立線性回歸模型,可以用不同的方法。例如用于最小二乘和梯度下降優(yōu)化的線性代數(shù)。
線性回歸已經(jīng)存在了200多年,并被廣泛研究。通常人們會去除非常相似或相關(guān)的變量,并從數(shù)據(jù)中去除噪聲。對于新手來說,這是一個簡單易上手的技術(shù)。
2.邏輯回歸
邏輯回歸是機器學(xué)習(xí)從統(tǒng)計領(lǐng)域借鑒的另一個技術(shù),這是二元分類問題的首選算法。
邏輯回歸與線性回歸類似的一點是,目標(biāo)都是找出每個輸入變量加權(quán)的系數(shù)值。不同的是,輸出的預(yù)測結(jié)果需要用非線性的邏輯函數(shù)進行變換。
邏輯函數(shù)看起來像一個大寫的S,它可以將任何值轉(zhuǎn)化成一個0到1的數(shù)值。因此,我們可以將這一規(guī)則應(yīng)用于邏輯函數(shù)的輸出,將值限定在0到1之間(例如,IF less than 0.5 then output 1),這樣就可以預(yù)測一個組值。
邏輯回歸
根據(jù)模型學(xué)習(xí)的方法,邏輯回歸生成的預(yù)測也可以用作0到1之間的給定數(shù)據(jù)的概率。這對于需要給出更多原理做出預(yù)測的問題很有用。
像線性回歸一樣,邏輯回歸在刪除與輸出變量無關(guān)的屬性以及非常相似的屬性之后,表現(xiàn)得效果更好。對于二元分類問題,這一模型很容易學(xué)習(xí),并且效率也很高。
3.線性判別分析(LDA)
線性回歸通常只適用于二元分類問題。如果類別超過兩個,你可能就需要線性判別分析算法來解決分類問題了。
LDA的表示方法非常直接。它由數(shù)據(jù)的統(tǒng)計屬性構(gòu)成,為每個類別計算。對于單個輸入變量,這包括:
每一類別的平均值; 計算所有類別的差異
線性判別分析
通過計算每個類別的識別值(discriminate value)并對具有最大值的類別進行預(yù)測,從而做出最終的預(yù)測,該技術(shù)假定數(shù)據(jù)的分布遵循高斯分布(鐘形曲線),因此在開始分析之前,需要移除數(shù)據(jù)中的異常值。對于分類預(yù)測建模問題來說,這是一種簡單而強大的方法。
4.分類與回歸樹
決策樹是機器學(xué)習(xí)預(yù)測建模的重要算法。
決策樹的模型是二叉樹,這是利用算法和數(shù)據(jù)結(jié)構(gòu)構(gòu)建的二叉樹,每個節(jié)點代表一個輸入變量(x)和該變量上的一個分裂點(假定變量是數(shù)字)。
決策樹
樹葉的節(jié)點包含用于進行預(yù)測的輸出變量(y)。預(yù)測是從樹叉開始,直到到達樹葉節(jié)點并輸出該節(jié)點的組值。
決策樹學(xué)習(xí)速度快,作出預(yù)測的速度也快。它們能解決許多領(lǐng)域的問題,所以無需對數(shù)據(jù)進行預(yù)處理。
5.樸素貝葉斯
樸素貝葉斯雖然簡潔,但對預(yù)測建模來說是一種非常強大的算法。
該模型由兩種類型的概率組成,可以從您的訓(xùn)練數(shù)據(jù)中直接計算:1)每個類別的概率;2) 給定每個x值的每個類別的條件概率。計算出來后,概率模型就能用貝葉斯定理對新數(shù)據(jù)進行預(yù)測。當(dāng)你的數(shù)據(jù)是實值時,通常假設(shè)一個高斯分布,這樣你可以很容易地預(yù)估這些概率。
樸素貝葉斯之所以被稱為樸素,是因為它假定每個輸入的變量都是獨立的。這個假設(shè)對于真實的數(shù)據(jù)是不實際的,但是,這種技術(shù)在大范圍復(fù)雜的問題上非常有效。
6.K-近鄰算法
KNN算法也很簡單有效。模型就是用整個訓(xùn)練數(shù)據(jù)集表示的,非常簡單吧!
通過在整個數(shù)據(jù)集中搜索K個最相似的樣本(鄰居),將它們匯總后輸出變量來預(yù)測新的數(shù)據(jù)點。對于回歸問題,這可能是平均輸出變量;對分類問題,這可能是類值的眾數(shù)(最常見的值)。
重點在于如何確定數(shù)據(jù)樣本之間的相似性。如果你的數(shù)據(jù)規(guī)模相同(例如都以英寸為單位),最簡單的方法就是使用歐幾里得距離,如果是數(shù)字,你可以直接根據(jù)每個輸入變量之間的差異進行計算。
K-近鄰算法
KNN可能需要大量內(nèi)存或空間來存儲所有的數(shù)據(jù),但是只有在需要預(yù)測時才會工作(或?qū)W習(xí))。您也可以隨時更新和管理訓(xùn)練樣本,以保證預(yù)測的準(zhǔn)確性。
距離或緊密性可能會在有大量的輸入變量時崩潰,這會導(dǎo)致算法性能下降,這被稱為維度的詛咒。所以建議只使用那些與預(yù)測輸出變量最相關(guān)的輸入變量。
7.學(xué)習(xí)向量量化(learning vector quantization)
K-近鄰算法的缺點之一是你需要利用整個數(shù)據(jù)集進行訓(xùn)練,而學(xué)習(xí)向量量化算法(LVQ)是一種人工神經(jīng)網(wǎng)絡(luò)算法,你可以選擇訓(xùn)練樣本,并學(xué)習(xí)這些樣本應(yīng)該是什么樣的。
LVQ
LVQ是由向量表的集合表示,這些在開始時是隨機選擇的,在學(xué)習(xí)過程中數(shù)次迭代后對訓(xùn)練數(shù)據(jù)集做出最佳總結(jié)。在學(xué)習(xí)之后,這些向量表可以用來做類似K-緊鄰算法一樣的預(yù)測。通過計算每個向量編碼表和新數(shù)據(jù)樣本之間的距離來找到最近鄰居,然后返回最佳匹配單元的類值(或在回歸情況下的實際值)作為預(yù)測。如果你重新調(diào)整數(shù)據(jù)使其具有相同的范圍(如0到1之間),則可以獲得最佳結(jié)果。
如果您發(fā)現(xiàn)KNN能在你的數(shù)據(jù)集上表現(xiàn)良好,可以嘗試使用LVQ來減少存儲整個數(shù)據(jù)集的內(nèi)存要求。
8.支持向量機
支持向量機(SVM)也許是最受歡迎的機器學(xué)習(xí)算法之一。
超平面是分割輸入變量空間的線。在SVM中,超平面能以最佳比例將輸入變量空間的點以它們的類別分開。在二維空間中,你可以將其視為一條線,假設(shè)輸入的所有點都可以被這條線完全分開。SVM學(xué)習(xí)算法可以找到能夠被超平面完美分割類別的系數(shù)。
SVM
超平面和最近數(shù)據(jù)點之間的距離被稱為間隔(margin)。能夠?qū)深惙珠_的最佳或最優(yōu)的超平面往往是有最大間隔的線,只有這些點與超平面的定義和分類器的構(gòu)造有關(guān),這些點就是支持向量。它們支持或定義了超平面,在實踐中,可以使用優(yōu)化算法來找到最大化間隔的系數(shù)的值。
9.Bagging和隨機森林
隨機森林是目前最流行、最強大的機器學(xué)習(xí)算法之一,它是一種由Bootstrap或Bagging集成的機器學(xué)習(xí)算法。
Bootstrap是從數(shù)據(jù)樣本中估算數(shù)量的強大的統(tǒng)計方法,就像一種平均值。你需要從你的數(shù)據(jù)中抽取大量樣本,計算平均值,然后再計算所有平均值的平均值,從而更好地估計真實平均值。
在Bagging中,可以用上述相同的方法估計整個數(shù)據(jù)模型,最常見的是決策樹。選取訓(xùn)練數(shù)據(jù)中的多個樣本,然后構(gòu)建模型。當(dāng)你需要預(yù)測新數(shù)據(jù)時,每個模型都會做出預(yù)測,取平均值后以便更好地估計真實輸出值。
隨機森林是對以上方法的調(diào)整,在隨機森林中,決策樹是這樣創(chuàng)建的,不選擇最優(yōu)分割點,而是通過引入隨機性選擇次優(yōu)分割點。因此,針對每個數(shù)據(jù)樣本創(chuàng)建的模型與其它方式相比會有所不同,但仍然非常精確,結(jié)合預(yù)測的值可以更好地估計真實的潛在輸出價值。
如果較大方差的算法(如決策樹)能獲得較好結(jié)果,那么通常可以通過bagging獲得更好的結(jié)果。
10.Boosting和AdaBoost
Boosting是一種集成技術(shù),它試圖從一些弱分類器中創(chuàng)建一個強分類器。通過從訓(xùn)練數(shù)據(jù)中構(gòu)建模型,然后創(chuàng)建第二個模型來嘗試糾正第一個模型的錯誤,直到模型能完美預(yù)測訓(xùn)練數(shù)據(jù)集或已經(jīng)添加了大量模型后,才會停止創(chuàng)建模型。
AdaBoost是為二元分類問題開發(fā)的第一個真正成功的boosting算法,這可以幫助我們更好地理解boosting。現(xiàn)在大多boosting方法都建立在AdaBoost上,最出名的就是隨機梯度上升。
AdaBoost與短決策樹一起使用,在第一棵樹創(chuàng)建之后,要使用每個訓(xùn)練樣本上的樹的性能衡量下一棵樹應(yīng)該對每個訓(xùn)練樣本分配多少注意力。難以預(yù)測的訓(xùn)練數(shù)據(jù)被分配的權(quán)重高,易于預(yù)測的樣本權(quán)重則少。依次創(chuàng)建模型后,每個模型都會在訓(xùn)練樣本上更新權(quán)重。所有樹在建立之后,將會對新數(shù)據(jù)進行預(yù)測,每棵樹的性能由它們在訓(xùn)練數(shù)據(jù)上的表現(xiàn)進行權(quán)衡。
由于大量的注意力都放在了糾正算法的錯誤上,所以清除異常數(shù)據(jù)是非常重要的。
結(jié)語
初學(xué)者在面對各種各樣機器學(xué)習(xí)算法時最常問的問題是:“我該使用那種算法?”回答這一問題要考慮許多因素,包括數(shù)據(jù)的尺寸、質(zhì)量和性質(zhì)、可用的計算時間、任務(wù)的緊迫性以及你想用數(shù)據(jù)做什么。
即使是一位經(jīng)驗豐富的數(shù)據(jù)科學(xué)家,他也無法憑空判斷哪種算法表現(xiàn)得最好,一定是要嘗試之后才能下結(jié)論。除了上述10種算法外,還有其他很多機器學(xué)習(xí)算法,如果你是新手的話,這篇文章可以作為你的入門教程。
-
算法
+關(guān)注
關(guān)注
23文章
4678瀏覽量
94287 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8477瀏覽量
133803 -
決策樹
+關(guān)注
關(guān)注
3文章
96瀏覽量
13728 -
線性回歸
+關(guān)注
關(guān)注
0文章
41瀏覽量
4381
原文標(biāo)題:最適合機器學(xué)習(xí)新手的10種算法
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論