在機(jī)器學(xué)習(xí)中,有一種叫做“沒(méi)有免費(fèi)的午餐”的定理。簡(jiǎn)而言之,它指出沒(méi)有任何一種算法能夠適用每一個(gè)問(wèn)題,而且它對(duì)于監(jiān)督式學(xué)習(xí)(即預(yù)測(cè)性建模)尤其重要。
例如,你不能說(shuō)神經(jīng)網(wǎng)絡(luò)總是比決策樹(shù)好,反之亦然。有很多因素在起作用,比如數(shù)據(jù)集的大小和結(jié)構(gòu)。
因此,你應(yīng)該為你的問(wèn)題嘗試許多不同的算法,同時(shí)使用數(shù)據(jù)的“測(cè)試集”來(lái)評(píng)估性能并選擇勝出者。
當(dāng)然,你嘗試的算法必須適合你的問(wèn)題,這就是選擇正確的機(jī)器學(xué)習(xí)任務(wù)的地方。打一個(gè)比方,如果你需要清理你的房子,你可以使用真空吸塵器、掃帚或拖把,但是你不會(huì)用一個(gè)鏟子來(lái)挖掘。
大的原則
然而,有一個(gè)共同的原則,即所有監(jiān)督機(jī)器學(xué)習(xí)算法預(yù)測(cè)建模的基礎(chǔ)。
機(jī)器學(xué)習(xí)算法被描述為學(xué)習(xí)一個(gè)目標(biāo)函數(shù),將輸入變量(X)最佳映射到輸出變量(Y)的目標(biāo)函數(shù)(f):Y = f(X)
這是一個(gè)通用的學(xué)習(xí)任務(wù),我們希望在未來(lái)(Y)給出預(yù)測(cè)輸入變量(X)的新例子。我們不知道函數(shù)(f)是什么樣子或是它的形式。如果這樣做,我們會(huì)直接使用它,不需要使用機(jī)器學(xué)習(xí)算法從數(shù)據(jù)中學(xué)習(xí)它。
最常見(jiàn)的機(jī)器學(xué)習(xí)類型是學(xué)習(xí)映射Y = f(X)來(lái)預(yù)測(cè)新的X。這被稱為預(yù)測(cè)建?;蝾A(yù)測(cè)分析,我們的目標(biāo)是使最準(zhǔn)確的預(yù)測(cè)成為可能。
對(duì)于渴望了解機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí)的機(jī)器學(xué)習(xí)新手,請(qǐng)瀏覽數(shù)據(jù)科學(xué)家使用的前10位的機(jī)器學(xué)習(xí)算法。
1 - 線性回歸
線性回歸可能是統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中最知名和最易理解的算法之一。
預(yù)測(cè)建模主要關(guān)注最小化模型的誤差或者以可解釋性為代價(jià)來(lái)做出最準(zhǔn)確的預(yù)測(cè)。我們將借用、重用和竊取包括統(tǒng)計(jì)數(shù)據(jù)在內(nèi)的許多不同領(lǐng)域的算法,并將其用于這些目的。
線性回歸的表示是一個(gè)方程,通過(guò)找到稱為系數(shù)(B)的輸入變量的特定權(quán)重來(lái)描述最適合輸入變量(x)和輸出變量(y)之間關(guān)系的線。
例如:y = B0 + B1 * x
給定輸入x,我們將預(yù)測(cè)y,線性回歸學(xué)習(xí)算法的目標(biāo)是找到系數(shù)B0和B1的值。
可以使用不同的技術(shù)從數(shù)據(jù)中學(xué)習(xí)線性回歸模型,例如用于普通最小二乘和梯度下降優(yōu)化的線性代數(shù)解。
線性回歸已經(jīng)存在了200多年,并且已經(jīng)被廣泛研究。如果可能的話,使用這種技術(shù)的一些經(jīng)驗(yàn)法則是去除非常相似的變量(相關(guān)),并從數(shù)據(jù)中去除噪聲。這是一個(gè)快速和簡(jiǎn)單的技術(shù),也是一個(gè)好的算法。
2 - Logistic回歸
邏輯回歸是機(jī)器學(xué)習(xí)從統(tǒng)計(jì)領(lǐng)域借鑒的另一種技術(shù)。這是二進(jìn)制分類問(wèn)題的首選方法(有兩個(gè)類值的問(wèn)題)。
邏輯回歸就像線性回歸,因?yàn)槟繕?biāo)是找出加權(quán)每個(gè)輸入變量的系數(shù)值。與線性回歸不同,輸出的預(yù)測(cè)使用稱為邏輯函數(shù)的非線性函數(shù)進(jìn)行變換。
邏輯函數(shù)看起來(lái)像一個(gè)大S,并將任何值轉(zhuǎn)換為0到1的范圍。這是有用的,因?yàn)槲覀兛梢詫⒁?guī)則應(yīng)用到邏輯函數(shù)的輸出,將值捕設(shè)為0和1(例如,IF小于0.5,則輸出1)并預(yù)測(cè)一個(gè)類別值。
由于模型的學(xué)習(xí)方式,邏輯回歸的預(yù)測(cè)也可以作為一個(gè)給定數(shù)據(jù)實(shí)例的概率,屬于第0類或第1類。這對(duì)于需要為預(yù)測(cè)提供更多理由的問(wèn)題很有用。
像線性回歸一樣,邏輯回歸在刪除與輸出變量無(wú)關(guān)的屬性以及非常相似(相關(guān))的屬性時(shí)效果更好。對(duì)于二元分類問(wèn)題,這是一個(gè)快速學(xué)習(xí)和且有效的二元分類問(wèn)題的模型。
3 - 線性判別分析
Logistic回歸是傳統(tǒng)上僅限于兩類分類問(wèn)題的分類算法。如果你有兩個(gè)以上的類,那么,線性判別分析算法是首選的線性分類技術(shù)。
LDA的表示非常簡(jiǎn)單。它由你的數(shù)據(jù)統(tǒng)計(jì)屬性組成,為每個(gè)類別計(jì)算。對(duì)于單個(gè)輸入變量,這包括:
·在所有類中計(jì)算的方差
·線性判別分析
預(yù)測(cè)是通過(guò)計(jì)算每個(gè)類別的識(shí)別值并對(duì)具有最大值的類別進(jìn)行預(yù)測(cè)來(lái)進(jìn)行的。該技術(shù)假定數(shù)據(jù)具有高斯分布(鐘形曲線),因此在手之前從數(shù)據(jù)中移除異常值是個(gè)好主意。這是一個(gè)簡(jiǎn)單而強(qiáng)大的分類預(yù)測(cè)建模問(wèn)題的方法。
4 - 分類和回歸樹(shù)
決策樹(shù)是機(jī)器學(xué)習(xí)預(yù)測(cè)建模的重要算法。
決策樹(shù)模型的表示是二叉樹(shù),來(lái)自算法和數(shù)據(jù)結(jié)構(gòu),沒(méi)什么特別的。每個(gè)節(jié)點(diǎn)代表一個(gè)單獨(dú)的輸入變量(x)和該變量上的一個(gè)拆分點(diǎn)(假定變量是數(shù)值)。
樹(shù)的葉節(jié)點(diǎn)包含用于進(jìn)行預(yù)測(cè)的輸出變量(y)。預(yù)測(cè)是通過(guò)遍歷樹(shù)的分裂進(jìn)行的,直到到達(dá)葉節(jié)點(diǎn)并輸出該葉節(jié)點(diǎn)的類值。
樹(shù)的學(xué)習(xí)速度快,預(yù)測(cè)速度快。對(duì)于廣泛的問(wèn)題,它們也經(jīng)常是準(zhǔn)確的,不需要為你的數(shù)據(jù)做任何特別準(zhǔn)備。
5 - 樸素貝葉斯
樸素貝葉斯是一個(gè)簡(jiǎn)單但又強(qiáng)大的預(yù)測(cè)建模算法。
該模型由兩種概率組成,可以從你的訓(xùn)練數(shù)據(jù)中直接計(jì)算:1)每個(gè)類別的概率;和2)給定每個(gè)x值的每個(gè)類別的條件概率。一旦計(jì)算出來(lái),就可以使用概率模型來(lái)使用貝葉斯定理對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。當(dāng)你的數(shù)據(jù)是實(shí)值時(shí),通常假定一個(gè)高斯分布(鐘形曲線),這樣你可以很容易地估計(jì)這些概率。
樸素貝葉斯假定每個(gè)輸入變量是獨(dú)立的,這是一個(gè)強(qiáng)大的假設(shè),對(duì)于真實(shí)的數(shù)據(jù)是不切實(shí)際的,但是,這種技術(shù)在大范圍的復(fù)雜問(wèn)題上是非常有效的。
6-K-近鄰算法
KNN算法非常簡(jiǎn)單而且非常有效。 KNN的模型表示是整個(gè)訓(xùn)練數(shù)據(jù)集,比較簡(jiǎn)單。
通過(guò)搜索K個(gè)最相似的實(shí)例(鄰居)的整個(gè)訓(xùn)練集并且匯總這些K個(gè)實(shí)例的輸出變量來(lái)預(yù)測(cè)新的數(shù)據(jù)點(diǎn)。對(duì)于回歸問(wèn)題,這可能是平均輸出變量,對(duì)于分類問(wèn)題,這可能是模式(或最常見(jiàn)的)類值。
訣竅在于如何確定數(shù)據(jù)實(shí)例之間的相似性。最簡(jiǎn)單的方法就是就是使用Euclidean距離,你可以根據(jù)每個(gè)輸入變量之間的差異直接計(jì)算一個(gè)數(shù)字。
KNN可能需要大量的內(nèi)存或空間來(lái)存儲(chǔ)所有的數(shù)據(jù),但是只有在需要預(yù)測(cè)時(shí)才會(huì)執(zhí)行計(jì)算(或?qū)W習(xí))。你也可以隨時(shí)更新和管理你的訓(xùn)練實(shí)例,以保持預(yù)測(cè)的準(zhǔn)確性。
距離或貼近度的概念可能在非常高的維度(大量的輸入變量)中分解,這會(huì)對(duì)算法在你的問(wèn)題上的性能產(chǎn)生負(fù)面影響。它建議你只使用那些與預(yù)測(cè)輸出變量最相關(guān)的輸入變量。
7 - 學(xué)習(xí)矢量量化
KNN的一個(gè)缺點(diǎn)是你需要堅(jiān)持你的整個(gè)訓(xùn)練數(shù)據(jù)集,學(xué)習(xí)矢量量化算法(簡(jiǎn)稱LVQ)是一種人工神經(jīng)網(wǎng)絡(luò)算法,可以讓你選擇多少個(gè)訓(xùn)練實(shí)例,并精確地學(xué)習(xí)這些實(shí)例應(yīng)該是什么樣的。
LVQ的表示是codebook vector的集合。這些在開(kāi)始時(shí)是隨機(jī)選擇的,并且適合于在學(xué)習(xí)算法的多次迭代中最佳地總結(jié)訓(xùn)練數(shù)據(jù)集。在學(xué)習(xí)之后,codebook vector可以用來(lái)做如KNN一樣的預(yù)測(cè)。通過(guò)計(jì)算每個(gè)codebook vector和新數(shù)據(jù)實(shí)例之間的距離來(lái)找到最相似的鄰居(最佳匹配碼本向量)。然后將最佳匹配單元的類別值或(在回歸情況下的實(shí)際值)作為預(yù)測(cè)返回。如果你重新調(diào)整數(shù)據(jù)以使其具有相同的范圍(如0和1之間),則可以獲得最佳結(jié)果。
如果你發(fā)現(xiàn)KNN在你的數(shù)據(jù)集上給出了很好的結(jié)果,請(qǐng)嘗試使用LVQ來(lái)減少存儲(chǔ)整個(gè)訓(xùn)練數(shù)據(jù)集的內(nèi)存要求。
8 - 支持向量機(jī)
支持向量機(jī)也許是最受歡迎和討論的機(jī)器學(xué)習(xí)算法之一。
超平面是分割輸入變量空間的線。在SVM中,選擇一個(gè)超平面,以便通過(guò)它們的類(類0或類1)將輸入變量空間中的點(diǎn)最好地分開(kāi)。在二維中,可以將其視為一條線,讓我們假設(shè)所有的輸入點(diǎn)都可以被這條線完全分開(kāi)。 SVM學(xué)習(xí)算法找到導(dǎo)致由超平面對(duì)類進(jìn)行最佳分離的系數(shù)。
超平面和最近的數(shù)據(jù)點(diǎn)之間的距離被稱為邊界??梢苑蛛x兩個(gè)類的最好或最優(yōu)超平面是具有最大邊界的直線。只有這些點(diǎn)與定義超平面和分類器的構(gòu)造有關(guān)。這些點(diǎn)被稱為支持向量,他們支持或定義超平面。在實(shí)踐中,使用優(yōu)化算法來(lái)找到最大化邊界的系數(shù)的值。
支持向量機(jī)可能是最強(qiáng)大的現(xiàn)成分類器之一,值得在你的數(shù)據(jù)集上嘗試。
9 - Bagging 和隨機(jī)森林
隨機(jī)森林是最流行和最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。它是一種稱為Bootstrap Aggregation或Bagging的集成機(jī)器學(xué)習(xí)算法。
Bootstrap 是從數(shù)據(jù)樣本中估算數(shù)量的一種強(qiáng)大的統(tǒng)計(jì)方法。你需要大量的數(shù)據(jù)樣本、計(jì)算平均值,然后平均所有的平均值,以便更好地估計(jì)真實(shí)的平均值。
在Bagging 中,使用相同的方法,而是用于估計(jì)整個(gè)統(tǒng)計(jì)模型,最常見(jiàn)的是決策樹(shù)。你的訓(xùn)練數(shù)據(jù)的多個(gè)樣本被采取,然后為每個(gè)數(shù)據(jù)樣本構(gòu)建模型。當(dāng)你需要對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)時(shí),每個(gè)模型都會(huì)進(jìn)行預(yù)測(cè),并對(duì)預(yù)測(cè)進(jìn)行平均,以更好地估計(jì)真實(shí)的產(chǎn)出值。
隨機(jī)森林是對(duì)這種方法的一種調(diào)整,在這種方法中創(chuàng)建決策樹(shù),而不是選擇最佳分割點(diǎn),通過(guò)引入隨機(jī)性來(lái)進(jìn)行次優(yōu)分割。
因此,為每一個(gè)數(shù)據(jù)樣本創(chuàng)建的模型比它們本來(lái)的樣子更不一樣,但是它們以其獨(dú)特和不同的方式仍然是準(zhǔn)確的。結(jié)合他們的預(yù)測(cè)可以更好地估計(jì)真實(shí)的潛在產(chǎn)出價(jià)值。
如果用高方差的算法(如決策樹(shù))獲得較好的結(jié)果,那么通??梢酝ㄟ^(guò)bagging算法來(lái)獲得更好的結(jié)果。
10 - 增強(qiáng)和AdaBoost
Boosting是一種集成技術(shù),試圖從一些弱分類器中創(chuàng)建一個(gè)強(qiáng)分類器。這是通過(guò)從訓(xùn)練數(shù)據(jù)構(gòu)建模型,然后創(chuàng)建第二個(gè)模型來(lái)嘗試糾正第一個(gè)模型的錯(cuò)誤。添加模型,直到完美預(yù)測(cè)訓(xùn)練集或添加最大數(shù)量的模型。
AdaBoost是為二進(jìn)制分類開(kāi)發(fā)的第一個(gè)真正成功的增強(qiáng)算法。這是理解提升的最佳起點(diǎn)?,F(xiàn)代的助推方法建立在AdaBoost上,最顯著的是隨機(jī)梯度提升機(jī)。
AdaBoost與短決策樹(shù)一起使用。在創(chuàng)建第一棵樹(shù)之后,使用每個(gè)訓(xùn)練實(shí)例上的樹(shù)的性能來(lái)衡量所創(chuàng)建的下一棵樹(shù)應(yīng)該關(guān)注每個(gè)訓(xùn)練實(shí)例的注意力。難以預(yù)測(cè)的訓(xùn)練數(shù)據(jù)被賦予更多的權(quán)重,而易于預(yù)測(cè)的實(shí)例被賦予更少的權(quán)重。依次創(chuàng)建模型,每個(gè)模型更新影響由序列中下一棵樹(shù)執(zhí)行的學(xué)習(xí)的訓(xùn)練實(shí)例的權(quán)重。在建立所有樹(shù)之后,對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè),并且通過(guò)訓(xùn)練數(shù)據(jù)的精確度對(duì)每棵樹(shù)的性能進(jìn)行加權(quán)。
因?yàn)槿绱硕嗟淖⒁饬Ψ旁诹思m正算法的錯(cuò)誤上,所以清除掉異常值的數(shù)據(jù)非常重要。
初學(xué)者在面對(duì)各種各樣的機(jī)器學(xué)習(xí)算法時(shí)所提出的一個(gè)典型問(wèn)題是“我應(yīng)該使用哪種算法?”問(wèn)題的答案取決于許多因素,包括:(1)數(shù)據(jù)的大小、質(zhì)量和性質(zhì);(2)可用的計(jì)算時(shí)間; (3)任務(wù)的緊迫性; (4)你想要如何處理數(shù)據(jù)。
即使是一位經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家,在嘗試不同的算法之前,也無(wú)法分辨哪種算法會(huì)表現(xiàn)最好。雖然還有很多其他的機(jī)器學(xué)習(xí)算法,但這些算法是最受歡迎的算法。如果你是機(jī)器學(xué)習(xí)的新手,這將是一個(gè)很好的學(xué)習(xí)起點(diǎn)。