姓名:謝童? 學(xué)號(hào):16020188008? 轉(zhuǎn)自微信公眾號(hào)? Bigquant
在機(jī)器學(xué)習(xí)中,有一個(gè)叫做 “ 無(wú)免費(fèi)午餐 ” 的定理(NFL)。簡(jiǎn)而言之,我們無(wú)法找到一個(gè)放之四海而皆準(zhǔn)的最優(yōu)方案,這一點(diǎn)對(duì)于監(jiān)督學(xué)習(xí)(即預(yù)測(cè)建模)尤為重要。
例如,你不能說(shuō)神經(jīng)網(wǎng)絡(luò)總是比決策樹(shù)好,反之亦然。因?yàn)槠渲杏泻芏嘁蛩卦谄鹱饔茫热鐢?shù)據(jù)集的大小和結(jié)構(gòu)。
因此,您應(yīng)該針對(duì)您的問(wèn)題嘗試多種不同的算法,同時(shí),保留一組數(shù)據(jù),即“測(cè)試集”來(lái)評(píng)估性能并選擇優(yōu)勝者。
當(dāng)然,您嘗試的算法必須適合您的問(wèn)題,所以需要選擇正確的機(jī)器學(xué)習(xí)任務(wù)。打個(gè)比方,如果你需要打掃房子,你可能會(huì)用吸塵器、掃帚或拖把,但你不會(huì)拿出鏟子開(kāi)始挖掘。
大原則
在所有監(jiān)督機(jī)器學(xué)習(xí)算法的基礎(chǔ)上,有一個(gè)共同的原則。
機(jī)器學(xué)習(xí)算法被描述為學(xué)習(xí)一個(gè)目標(biāo)函數(shù)(f),它最好地將輸入變量(X)映射到輸出變量(Y): Y = f(X)
這是一項(xiàng)通用的學(xué)習(xí)任務(wù),即我們想在給出新的輸入變量(X)后預(yù)測(cè)(Y),但我們不知道函數(shù)(f)是什么樣子或者它的形式,不然我們就會(huì)直接使用它,而不需要使用機(jī)器學(xué)習(xí)算法從數(shù)據(jù)中學(xué)習(xí)了。
最常見(jiàn)的機(jī)器學(xué)習(xí)類型是學(xué)習(xí)映射Y = f(X)來(lái)為新的X做出Y的預(yù)測(cè)。這被稱為預(yù)測(cè)建模或預(yù)測(cè)分析,我們的目標(biāo)是使最準(zhǔn)確的預(yù)測(cè)成為可能。
對(duì)于渴望了解機(jī)器學(xué)習(xí)基本原理的機(jī)器學(xué)習(xí)新手來(lái)說(shuō),這里有一個(gè)關(guān)于數(shù)據(jù)科學(xué)家使用的10種機(jī)器學(xué)習(xí)算法的鳥(niǎo)瞰。
1.線性回歸
線性回歸可能是統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中最著名和最容易理解的算法之一。
預(yù)測(cè)建模主要關(guān)注的是最小化模型的誤差,以犧牲可解釋性為代價(jià)使最準(zhǔn)確的預(yù)測(cè)成為可能。我們借鑒各種的領(lǐng)域的算法來(lái)處理統(tǒng)計(jì)數(shù)據(jù)以達(dá)到預(yù)測(cè)目的。
線性回歸的表示是一個(gè)方程,它描述了一條線,通過(guò)尋找輸入變量系數(shù)(B)的特定權(quán)重,擬合輸入變量(x)和輸出變量(y)之間的關(guān)系。
例如:y = B0 + B1 * x
我們將在給定輸入x的情況下預(yù)測(cè)y,線性回歸學(xué)習(xí)算法的目標(biāo)是找到系數(shù)B0和B1的值。 可以使用不同的技術(shù)從數(shù)據(jù)中學(xué)習(xí)線性回歸模型,如普通最小二乘的線性代數(shù)解和梯度下降優(yōu)化。
線性回歸已經(jīng)有200多年的歷史了,并被廣泛研究。在使用此技術(shù)時(shí),一些很好的經(jīng)驗(yàn)法則是刪除非常相似(相關(guān))的變量,并盡可能從數(shù)據(jù)中刪除噪聲。這是一種快速簡(jiǎn)單的技術(shù),也是一種很好的算法。
2.邏輯回歸
邏輯回歸是機(jī)器學(xué)習(xí)在統(tǒng)計(jì)學(xué)領(lǐng)域借鑒的另一種技術(shù)。它是二進(jìn)制分類問(wèn)題(具有兩個(gè)類值的問(wèn)題)的首選方法。
邏輯回歸就像線性回歸,目標(biāo)是找到每個(gè)輸入變量的系數(shù)的值。與線性回歸不同的是,輸出的預(yù)測(cè)是用一個(gè)叫做logistic函數(shù)的非線性函數(shù)進(jìn)行轉(zhuǎn)換。
邏輯函數(shù)看起來(lái)像一個(gè)大S,它會(huì)將任意值轉(zhuǎn)換到0到1的范圍。這很有用,因?yàn)槲覀兛梢詫⒁粋€(gè)規(guī)則應(yīng)用于邏輯函數(shù)的輸出以將值壓縮到0和1(例如IF小于0.5然后輸出0)并預(yù)測(cè)一個(gè)類值。
由于模型的學(xué)習(xí)方式,邏輯回歸的預(yù)測(cè)也可以作為屬于0類或1類的給定數(shù)據(jù)實(shí)例的概率。這對(duì)于需要為預(yù)測(cè)提供概率解釋的問(wèn)題很有用。
與線性回歸一樣,當(dāng)您刪除與輸出變量無(wú)關(guān)的屬性以及彼此非常相似(相關(guān))的屬性時(shí),邏輯回歸確實(shí)更有效。這是一個(gè)快速有效地學(xué)習(xí)二分類問(wèn)題的模型。
3.線性判別分析
邏輯回歸是一種傳統(tǒng)上僅局限于兩類分類問(wèn)題的分類算法。如果你有兩個(gè)以上的類,那么線性判別分析算法是首選的線性分類技術(shù)。
LDA的表示非常直接。它包括數(shù)據(jù)的統(tǒng)計(jì)屬性,為每個(gè)類計(jì)算。對(duì)于單個(gè)輸入變量,包括:
每個(gè)類別的均值
每個(gè)類別的方差
通過(guò)計(jì)算每個(gè)類的判別值,并對(duì)具有最大值的類進(jìn)行預(yù)測(cè)。該技術(shù)假定數(shù)據(jù)具有高斯分布(鐘形曲線),因此最好事先從數(shù)據(jù)中刪除異常值。這是一種簡(jiǎn)單而有效的分類預(yù)測(cè)建模方法。
4.分類和回歸樹(shù)
決策樹(shù)是一種重要的預(yù)測(cè)建模算法。
決策樹(shù)模型用二叉樹(shù)來(lái)表示,二叉樹(shù)來(lái)自于算法和數(shù)據(jù)結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)代表一個(gè)輸入變量(x)和該變量上的分裂點(diǎn)(假設(shè)變量是數(shù)值)。
樹(shù)的葉節(jié)點(diǎn)包含一個(gè)輸出變量(y),用于進(jìn)行預(yù)測(cè)。過(guò)程是遍歷樹(shù)的分叉直到到達(dá)葉節(jié)點(diǎn)并在該葉節(jié)點(diǎn)上輸出類值。
樹(shù)的學(xué)習(xí)速度很快,預(yù)測(cè)的速度也很快。它們通常適用于廣泛的問(wèn)題,不需要對(duì)數(shù)據(jù)進(jìn)行任何特殊的準(zhǔn)備。
5.樸素貝葉斯
樸素貝葉斯(Naive Bayes)是一種簡(jiǎn)單但功能驚人的預(yù)測(cè)建模算法。
該模型由兩種可以直接從訓(xùn)練數(shù)據(jù)中計(jì)算的概率組成: 1) 每個(gè)類的概率; 2) 給定每個(gè)x值后每個(gè)類的條件概率。?
一旦計(jì)算出概率模型,就可以用貝葉斯定理對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。當(dāng)你的數(shù)據(jù)是實(shí)值時(shí),通常假設(shè)一個(gè)高斯分布(鐘形曲線),這樣你就可以很容易地估計(jì)這些概率。
樸素貝葉斯之所以稱“樸素”,是因?yàn)樗僭O(shè)每個(gè)輸入變量是獨(dú)立的。這對(duì)于真實(shí)數(shù)據(jù)來(lái)說(shuō)是一個(gè)很強(qiáng)的、不切實(shí)際的假設(shè),然而,該技術(shù)對(duì)于大量復(fù)雜問(wèn)題非常有效。
6.K近鄰
KNN算法非常簡(jiǎn)單和有效。通過(guò)對(duì)K個(gè)最相似的實(shí)例(鄰居)對(duì)整個(gè)訓(xùn)練集進(jìn)行搜索并匯總這些K個(gè)實(shí)例的輸出變量,可以對(duì)一個(gè)新的數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測(cè)。
對(duì)于回歸問(wèn)題,它可能是平均輸出變量,對(duì)于分類問(wèn)題,可能是模型(或最常見(jiàn))類值。
關(guān)鍵在于如何確定數(shù)據(jù)實(shí)例之間的相似性。如果您的屬性都具有相同的比例(例如,以英寸為單位),最簡(jiǎn)單的技術(shù)是使用歐幾里得距離,您可以根據(jù)每個(gè)輸入變量之間的差異直接計(jì)算該數(shù)字。
KNN可能需要大量?jī)?nèi)存或空間來(lái)存儲(chǔ)所有數(shù)據(jù),但只在需要預(yù)測(cè)時(shí)才進(jìn)行計(jì)算(或?qū)W習(xí))。您還可以隨著時(shí)間的推移更新和策劃您的訓(xùn)練實(shí)例,以保持預(yù)測(cè)準(zhǔn)確。
當(dāng)維數(shù)提高時(shí),空間的體積提高得很快,因而可用數(shù)據(jù)變得很稀疏,這會(huì)對(duì)算法的性能產(chǎn)生負(fù)面影響。這被稱為維度災(zāi)難。故建議您只使用那些與預(yù)測(cè)輸出變量最相關(guān)的輸入變量。
7.學(xué)習(xí)矢量量化
k近鄰的一個(gè)缺點(diǎn)是您需要掛載整個(gè)訓(xùn)練數(shù)據(jù)集。學(xué)習(xí)向量量化算法(或簡(jiǎn)稱LVQ)是一種人工神經(jīng)網(wǎng)絡(luò)算法,它允許您選擇要掛載的訓(xùn)練實(shí)例。
LVQ的表示是一組碼本向量(codebook vector),這些都是在開(kāi)始時(shí)隨機(jī)選擇的,并根據(jù)學(xué)習(xí)算法的多次迭代對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行最佳的總結(jié)。
在學(xué)習(xí)之后,碼本向量可以用來(lái)做出像k近鄰那樣的預(yù)測(cè)。通過(guò)計(jì)算每個(gè)碼本向量和新數(shù)據(jù)實(shí)例之間的距離,可以找到最相似的鄰(最佳匹配的碼本向量)。
然后返回最佳匹配單元的類值(或回歸時(shí)的真實(shí)值)作為預(yù)測(cè)。如果您重新縮放數(shù)據(jù),使其具有相同的范圍(如0到1之間),則可獲得最佳結(jié)果。
如果您發(fā)現(xiàn)KNN在您的數(shù)據(jù)集上表現(xiàn)良好,請(qǐng)嘗試使用LVQ來(lái)減少存儲(chǔ)整個(gè)訓(xùn)練數(shù)據(jù)集的內(nèi)存需求。
8.支持向量機(jī)
支持向量機(jī)(Support Vector Machines)可能是最流行和最受關(guān)注的機(jī)器學(xué)習(xí)算法之一。
超平面是分割輸入變量空間的線。在SVM中,通過(guò)選擇一個(gè)超平面,并根據(jù)輸入變量空間中的類(類0或類1),來(lái)最好地分離輸入變量空間中的點(diǎn)。
在二維中,你可以把它想象成一條直線,并假設(shè)所有的輸入點(diǎn)都可以被這條直線分開(kāi)。
支持向量機(jī)學(xué)習(xí)算法通過(guò)超平面的方法,找出使得類間達(dá)到最佳分離的系數(shù)。
超平面與最近的數(shù)據(jù)點(diǎn)之間的距離稱為邊距,能夠?qū)蓚€(gè)類分離得最好的或最優(yōu)的超平面是具有最大邊距的那條線,它是由幾個(gè)關(guān)鍵點(diǎn)決定的,這些點(diǎn)與定義超平面和構(gòu)造分類器直接相關(guān),被稱為支持向量。
SVM可能是最強(qiáng)大的開(kāi)箱即用分類器之一,非常值得在您的數(shù)據(jù)集中進(jìn)行這樣的嘗試。
9.裝袋和隨機(jī)森林
隨機(jī)森林是最流行和最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。它是一種稱為引導(dǎo)聚集算法(Bootstrap Aggregation)或裝袋(Bagging)的集成機(jī)器學(xué)習(xí)算法。
Bootstrap是一種強(qiáng)大的統(tǒng)計(jì)方法,比如求平均值,您可以從數(shù)據(jù)樣本中均勻有放回地取出一部分求平均值,然后把得到的平均值再求一個(gè)平均,這樣可以更好地估計(jì)真實(shí)平均值。
在裝袋(Bagging)中,用到同樣的方法,裝袋法并不僅適用于決策樹(shù),但對(duì)決策樹(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í)的輸出值。
隨機(jī)森林是這種方法的一個(gè)改進(jìn),在這種方法中,創(chuàng)建決策樹(shù),以便通過(guò)引入隨機(jī)性來(lái)進(jìn)行次優(yōu)分割,而不是選擇最佳分割點(diǎn)。
因此,為每個(gè)數(shù)據(jù)樣本創(chuàng)建的模型與其他情況下的模型更加不同,但仍然精確。將預(yù)測(cè)結(jié)果結(jié)合起來(lái),可以更好地估計(jì)潛在結(jié)果的真實(shí)值。
如果您使用具有高方差的算法(如決策樹(shù))得到不錯(cuò)的結(jié)果,那么您通過(guò)裝袋算法通常可以得到更好的結(jié)果。
10.提升和自適應(yīng)增強(qiáng)
Boosting是一種集成技術(shù),試圖從多個(gè)弱分類器中創(chuàng)建強(qiáng)分類器。通過(guò)從訓(xùn)練數(shù)據(jù)構(gòu)建一個(gè)模型,然后創(chuàng)建第二個(gè)模型試圖糾正第一個(gè)模型中的錯(cuò)誤。
不斷添加模型,直到訓(xùn)練集被完美地預(yù)測(cè)或者添加到最大數(shù)量。
AdaBoost是第一個(gè)為二分類開(kāi)發(fā)的真正成功的提升算法。
現(xiàn)代boosting方法建立在AdaBoost上,最著名的是隨機(jī)梯度提升機(jī)(stochastic gradient boosting machines)。
AdaBoost用于短決策樹(shù)。創(chuàng)建第一棵樹(shù)之后,使用樹(shù)在每個(gè)訓(xùn)練實(shí)例上的性能來(lái)得到一個(gè)權(quán)重,決定下一棵樹(shù)對(duì)每個(gè)訓(xùn)練實(shí)例的注意力。
難以預(yù)測(cè)的訓(xùn)練數(shù)據(jù)被賦予更多權(quán)重,而易于預(yù)測(cè)的實(shí)例被賦予更少的權(quán)重。
模型是一個(gè)接一個(gè)地順序創(chuàng)建的,每個(gè)模型更新訓(xùn)練實(shí)例上的權(quán)重,這些權(quán)重影響序列中下一個(gè)樹(shù)所執(zhí)行的學(xué)習(xí)。構(gòu)建完所有樹(shù)之后,將對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。
因?yàn)橹赜谛拚惴ǖ腻e(cuò)誤,所以重要的是提前清洗好數(shù)據(jù),去掉異常值。
最后
當(dāng)一個(gè)初學(xué)者面對(duì)各種各樣的機(jī)器學(xué)習(xí)算法時(shí),一個(gè)典型的問(wèn)題是 “ 我應(yīng)該使用哪種算法? ” 問(wèn)題的答案因許多因素而異,包括:(1) 數(shù)據(jù)的大小、質(zhì)量和性質(zhì);(2) 可用計(jì)算時(shí)間;(3) 任務(wù)的緊迫性;(4) 你想對(duì)數(shù)據(jù)做什么。
即使是經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家,在嘗試不同的算法之前,也無(wú)法判斷哪種算法的性能最好。雖然有許多其他的機(jī)器學(xué)習(xí)算法,但以上這些是最流行的。
如果你是機(jī)器學(xué)習(xí)的新手,開(kāi)始嘗試以上的算法將是一個(gè)很好的起點(diǎn)。