0
雷鋒網(wǎng) AI 科技評(píng)論按:在神經(jīng)網(wǎng)絡(luò)的成功的帶動(dòng)下,越來(lái)越多的研究人員和開(kāi)發(fā)人員都開(kāi)始重新審視機(jī)器學(xué)習(xí),開(kāi)始嘗試用某些機(jī)器學(xué)習(xí)方法自動(dòng)解決可以輕松采集數(shù)據(jù)的問(wèn)題。然而,在眾多的機(jī)器學(xué)習(xí)算法中,哪些是又上手快捷又功能強(qiáng)大、適合新手學(xué)習(xí)的呢?Towards Data Science 上一篇文章就介紹了十種新手必看的機(jī)器學(xué)習(xí)算法,雷鋒網(wǎng) AI 科技評(píng)論全文編譯如下。
機(jī)器學(xué)習(xí)領(lǐng)域有一條“沒(méi)有免費(fèi)的午餐”定理。簡(jiǎn)單解釋下的話,它是說(shuō)沒(méi)有任何一種算法能夠適用于所有問(wèn)題,特別是在監(jiān)督學(xué)習(xí)中。
例如,你不能說(shuō)神經(jīng)網(wǎng)絡(luò)就一定比決策樹(shù)好,反之亦然。要判斷算法優(yōu)劣,數(shù)據(jù)集的大小和結(jié)構(gòu)等眾多因素都至關(guān)重要。所以,你應(yīng)該針對(duì)你的問(wèn)題嘗試不同的算法。然后使用保留的測(cè)試集對(duì)性能進(jìn)行評(píng)估,選出較好的算法。
當(dāng)然,算法必須適合于你的問(wèn)題。就比如說(shuō),如果你想清掃你的房子,你需要吸塵器,掃帚,拖把。而不是拿起鏟子去開(kāi)始挖地。
不過(guò),對(duì)于預(yù)測(cè)建模來(lái)說(shuō),有一條通用的原則適用于所有監(jiān)督學(xué)習(xí)算法。
機(jī)器學(xué)習(xí)算法可以描述為學(xué)習(xí)一個(gè)目標(biāo)函數(shù) f,它能夠最好地映射出輸入變量 X 到輸出變量 Y。有一類(lèi)普遍的學(xué)習(xí)任務(wù)。我們要根據(jù)輸入變量 X 來(lái)預(yù)測(cè)出 Y。我們不知道目標(biāo)函數(shù) f 是什么樣的。如果早就知道,我們就可以直接使用它,而不需要再通過(guò)機(jī)器學(xué)習(xí)算法從數(shù)據(jù)中進(jìn)行學(xué)習(xí)了。
最常見(jiàn)的機(jī)器學(xué)習(xí)就是學(xué)習(xí) Y=f(X) 的映射,針對(duì)新的 X 預(yù)測(cè) Y。這叫做預(yù)測(cè)建模或預(yù)測(cè)分析。我們的目標(biāo)就是讓預(yù)測(cè)更加精確。
針對(duì)希望對(duì)機(jī)器學(xué)習(xí)有個(gè)基本了解的新人來(lái)說(shuō),下面將介紹數(shù)據(jù)科學(xué)家們最常使用的 10 種機(jī)器學(xué)習(xí)算法。
線性回歸可能是統(tǒng)計(jì)和機(jī)器學(xué)習(xí)領(lǐng)域最廣為人知的算法之一。
以犧牲可解釋性為代價(jià),預(yù)測(cè)建模的首要目標(biāo)是減小模型誤差或?qū)㈩A(yù)測(cè)精度做到最佳。我們從統(tǒng)計(jì)等不同領(lǐng)域借鑒了多種算法,來(lái)達(dá)到這個(gè)目標(biāo)。
線性回歸通過(guò)找到一組特定的權(quán)值,稱(chēng)為系數(shù) B。通過(guò)最能符合輸入變量 x 到輸出變量 y 關(guān)系的等式所代表的線表達(dá)出來(lái)。
例如:y = B0 + B1 * x 。我們針對(duì)給出的輸入 x 來(lái)預(yù)測(cè) y。線性回歸學(xué)習(xí)算法的目標(biāo)是找到 B0 和 B1 的值。
不同的技巧可以用于線性回歸模型。比如線性代數(shù)的普通最小二乘法,以及梯度下降優(yōu)化算法。線性回歸已經(jīng)有超過(guò) 200 年的歷史,已經(jīng)被廣泛地研究。根據(jù)經(jīng)驗(yàn),這種算法可以很好地消除相似的數(shù)據(jù),以及去除數(shù)據(jù)中的噪聲。它是快速且簡(jiǎn)便的首選算法。
邏輯回歸是另一種從統(tǒng)計(jì)領(lǐng)域借鑒而來(lái)的機(jī)器學(xué)習(xí)算法。
與線性回歸相同。它的目的是找出每個(gè)輸入變量的對(duì)應(yīng)參數(shù)值。不同的是,預(yù)測(cè)輸出所用的變換是一個(gè)被稱(chēng)作 logistic 函數(shù)的非線性函數(shù)。
logistic 函數(shù)像一個(gè)大 S。它將所有值轉(zhuǎn)換為 0 到 1 之間的數(shù)。這很有用,我們可以根據(jù)一些規(guī)則將 logistic 函數(shù)的輸出轉(zhuǎn)換為 0 或 1(比如,當(dāng)小于 0.5 時(shí)則為 1)。然后以此進(jìn)行分類(lèi)。
正是因?yàn)槟P蛯W(xué)習(xí)的這種方式,邏輯回歸做出的預(yù)測(cè)可以被當(dāng)做輸入為 0 和 1 兩個(gè)分類(lèi)數(shù)據(jù)的概率值。這在一些需要給出預(yù)測(cè)合理性的問(wèn)題中非常有用。
就像線性回歸,在需要移除與輸出變量無(wú)關(guān)的特征以及相似特征方面,邏輯回歸可以表現(xiàn)得很好。在處理二分類(lèi)問(wèn)題上,它是一個(gè)快速高效的模型。
邏輯回歸是一個(gè)二分類(lèi)問(wèn)題的傳統(tǒng)分類(lèi)算法。如果需要進(jìn)行更多的分類(lèi),線性判別分析算法(LDA)是一個(gè)更好的線性分類(lèi)方法。
對(duì) LDA 的解釋非常直接。它包括針對(duì)每一個(gè)類(lèi)的輸入數(shù)據(jù)的統(tǒng)計(jì)特性。對(duì)于單一輸入變量來(lái)說(shuō)包括:
類(lèi)內(nèi)樣本均值
總體樣本變量
通過(guò)計(jì)算每個(gè)類(lèi)的判別值,并根據(jù)最大值來(lái)進(jìn)行預(yù)測(cè)。這種方法假設(shè)數(shù)據(jù)服從高斯分布(鐘形曲線)。所以它可以較好地提前去除離群值。它是針對(duì)分類(lèi)模型預(yù)測(cè)問(wèn)題的一種簡(jiǎn)單有效的方法。
決策樹(shù)是機(jī)器學(xué)習(xí)預(yù)測(cè)建模的一類(lèi)重要算法。
可以用二叉樹(shù)來(lái)解釋決策樹(shù)模型。這是根據(jù)算法和數(shù)據(jù)結(jié)構(gòu)建立的二叉樹(shù),這并不難理解。每個(gè)節(jié)點(diǎn)代表一個(gè)輸入變量以及變量的分叉點(diǎn)(假設(shè)是數(shù)值變量)
樹(shù)的葉節(jié)點(diǎn)包括用于預(yù)測(cè)的輸出變量 y。通過(guò)樹(shù)的各分支到達(dá)葉節(jié)點(diǎn),并輸出對(duì)應(yīng)葉節(jié)點(diǎn)的分類(lèi)值。
樹(shù)可以進(jìn)行快速的學(xué)習(xí)和預(yù)測(cè)。通常并不需要對(duì)數(shù)據(jù)做特殊的處理,就可以使用這個(gè)方法對(duì)多種問(wèn)題得到準(zhǔn)確的結(jié)果。
樸素貝葉斯(Naive Bayes)是一個(gè)簡(jiǎn)單,但是異常強(qiáng)大的預(yù)測(cè)建模算法。
這個(gè)模型包括兩種概率。它們可以通過(guò)訓(xùn)練數(shù)據(jù)直接計(jì)算得到:1)每個(gè)類(lèi)的概率;2)給定 x 值情況下每個(gè)類(lèi)的條件概率。根據(jù)貝葉斯定理,一旦完成計(jì)算,就可以使用概率模型針對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè)。當(dāng)你的數(shù)據(jù)為實(shí)數(shù)時(shí),通常假設(shè)服從高斯分布(鐘形曲線)。這樣你可以很容易地預(yù)測(cè)這些概率。
之所以被稱(chēng)作樸素貝葉斯,是因?yàn)槲覀兗僭O(shè)每個(gè)輸入變量都是獨(dú)立的。這是一個(gè)強(qiáng)假設(shè),在真實(shí)數(shù)據(jù)中幾乎是不可能的。但對(duì)于很多復(fù)雜問(wèn)題,這種方法非常有效。
K 最近鄰算法(KNN)是一個(gè)非常簡(jiǎn)單有效的算法。KNN 的模型表示就是整個(gè)訓(xùn)練數(shù)據(jù)集。很簡(jiǎn)單吧?
對(duì)于新數(shù)據(jù)點(diǎn)的預(yù)測(cè)則是,尋找整個(gè)訓(xùn)練集中 K 個(gè)最相似的樣本(鄰居),并把這些樣本的輸出變量進(jìn)行總結(jié)。對(duì)于回歸問(wèn)題可能意味著平均輸出變量。對(duì)于分類(lèi)問(wèn)題則可能意味著類(lèi)值的眾數(shù)(最常出現(xiàn)的那個(gè)值)。
訣竅是如何在數(shù)據(jù)樣本中找出相似性。最簡(jiǎn)單的方法就是,如果你的特征都是以相同的尺度(比如說(shuō)都是英寸)度量的,你就可以直接計(jì)算它們互相之間的歐式距離。
KNN 需要大量空間來(lái)存儲(chǔ)所有的數(shù)據(jù)。但只是在需要進(jìn)行預(yù)測(cè)的時(shí)候才開(kāi)始計(jì)算(學(xué)習(xí))。你可以隨時(shí)更新并組織訓(xùn)練樣本以保證預(yù)測(cè)的準(zhǔn)確性。
在維數(shù)很高(很多輸入變量)的情況下,這種通過(guò)距離或相近程度進(jìn)行判斷的方法可能失敗。這會(huì)對(duì)算法的性能產(chǎn)生負(fù)面的影響。這被稱(chēng)作維度災(zāi)難。我建議你只有當(dāng)輸入變量與輸出預(yù)測(cè)變量最具有關(guān)聯(lián)性的時(shí)候使用這種算法。
K 最近鄰算法的缺點(diǎn)是你需要存儲(chǔ)所有訓(xùn)練數(shù)據(jù)集。而學(xué)習(xí)矢量量化(縮寫(xiě)為 LVQ)是一個(gè)人工神經(jīng)網(wǎng)絡(luò)算法。它允許你選擇需要保留的訓(xùn)練樣本個(gè)數(shù),并且學(xué)習(xí)這些樣本看起來(lái)應(yīng)該具有何種模式。
LVQ 可以表示為一組碼本向量的集合。在開(kāi)始的時(shí)候進(jìn)行隨機(jī)選擇。通過(guò)多輪學(xué)習(xí)算法的迭代,最后得到與訓(xùn)練數(shù)據(jù)集最相配的結(jié)果。通過(guò)學(xué)習(xí),碼本向量可以像 K 最近鄰算法那樣進(jìn)行預(yù)測(cè)。通過(guò)計(jì)算新數(shù)據(jù)樣本與碼本向量之間的距離找到最相似的鄰居(最符合碼本向量)。將最佳的分類(lèi)值(或回歸問(wèn)題中的實(shí)數(shù)值)返回作為預(yù)測(cè)值。如果你將數(shù)據(jù)調(diào)整到相同的尺度,比如 0 和 1,則可以得到最好的結(jié)果。
如果你發(fā)現(xiàn)對(duì)于你的數(shù)據(jù)集,KNN 有較好的效果,可以嘗試一下 LVQ 來(lái)減少存儲(chǔ)整個(gè)數(shù)據(jù)集對(duì)存儲(chǔ)空間的依賴(lài)。
支持向量機(jī)(SVM)可能是最常用并且最常被談到的機(jī)器學(xué)習(xí)算法。
超平面是一條劃分輸入變量空間的線。在 SVM 中,選擇一個(gè)超平面,它能最好地將輸入變量空間劃分為不同的類(lèi),要么是 0,要么是 1。在 2 維情況下,可以將它看做一根線,并假設(shè)所有輸入點(diǎn)都被這根線完全分開(kāi)。SVM 通過(guò)學(xué)習(xí)算法,找到最能完成類(lèi)劃分的超平面的一組參數(shù)。
超平面和最接近的數(shù)據(jù)點(diǎn)的距離看做一個(gè)差值。最好的超平面可以把所有數(shù)據(jù)劃分為兩個(gè)類(lèi),并且這個(gè)差值最大。只有這些點(diǎn)與超平面的定義和分類(lèi)器的構(gòu)造有關(guān)。這些點(diǎn)被稱(chēng)作支持向量。是它們定義了超平面。在實(shí)際使用中,優(yōu)化算法被用于找到一組參數(shù)值使差值達(dá)到最大。
SVM 可能是一種最為強(qiáng)大的分類(lèi)器,它值得你一試。
隨機(jī)森林是一個(gè)常用并且最為強(qiáng)大的機(jī)器學(xué)習(xí)算法。它是一種集成機(jī)器學(xué)習(xí)算法,稱(chēng)作自舉匯聚或 bagging。
bootstrap 是一種強(qiáng)大的統(tǒng)計(jì)方法,用于數(shù)據(jù)樣本的估算。比如均值。你從數(shù)據(jù)中采集很多樣本,計(jì)算均值,然后將所有均值再求平均。最終得到一個(gè)真實(shí)均值的較好的估計(jì)值。
在 bagging 中用了相似的方法。但是通常用決策樹(shù)來(lái)代替對(duì)整個(gè)統(tǒng)計(jì)模型的估計(jì)。從訓(xùn)練集中采集多個(gè)樣本,針對(duì)每個(gè)樣本構(gòu)造模型。當(dāng)你需要對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè),每個(gè)模型做一次預(yù)測(cè),然后把預(yù)測(cè)值做平均得到真實(shí)輸出的較好的預(yù)測(cè)值。
這里的不同在于在什么地方創(chuàng)建樹(shù),與決策樹(shù)選擇最優(yōu)分叉點(diǎn)不同,隨機(jī)森林通過(guò)加入隨機(jī)性從而產(chǎn)生次優(yōu)的分叉點(diǎn)。
每個(gè)數(shù)據(jù)樣本所創(chuàng)建的模型與其他的都不相同。但在唯一性和不同性方面仍然準(zhǔn)確。結(jié)合這些預(yù)測(cè)結(jié)果可以更好地得到真實(shí)的輸出估計(jì)值。
如果在高方差的算法(比如決策樹(shù))中得到較好的結(jié)果,你通常也可以通過(guò)袋裝這種算法得到更好的結(jié)果。
Boosting 是一種集成方法,通過(guò)多種弱分類(lèi)器創(chuàng)建一種強(qiáng)分類(lèi)器。它首先通過(guò)訓(xùn)練數(shù)據(jù)建立一個(gè)模型,然后再建立第二個(gè)模型來(lái)修正前一個(gè)模型的誤差。在完成對(duì)訓(xùn)練集完美預(yù)測(cè)之前,模型和模型的最大數(shù)量都會(huì)不斷添加。
AdaBoost 是第一種成功的針對(duì)二分類(lèi)的 boosting 算法。它是理解 boosting 的最好的起點(diǎn)?,F(xiàn)代的 boosting 方法是建立在 AdaBoost 之上。多數(shù)都是隨機(jī)梯度 boosting 機(jī)器。
AdaBoost 與短決策樹(shù)一起使用。當(dāng)?shù)谝豢脴?shù)創(chuàng)建之后,每個(gè)訓(xùn)練樣本的樹(shù)的性能將用于決定,針對(duì)這個(gè)訓(xùn)練樣本下一棵樹(shù)將給與多少關(guān)注。難于預(yù)測(cè)的訓(xùn)練數(shù)據(jù)給予較大的權(quán)值,反之容易預(yù)測(cè)的樣本給予較小的權(quán)值。模型按順序被建立,每個(gè)訓(xùn)練樣本權(quán)值的更新都會(huì)影響下一棵樹(shù)的學(xué)習(xí)效果。完成決策樹(shù)的建立之后,進(jìn)行對(duì)新數(shù)據(jù)的預(yù)測(cè),訓(xùn)練數(shù)據(jù)的精確性決定了每棵樹(shù)的性能。
因?yàn)橹攸c(diǎn)關(guān)注修正算法的錯(cuò)誤,所以移除數(shù)據(jù)中的離群值非常重要。
當(dāng)面對(duì)各種機(jī)器學(xué)習(xí)算法,一個(gè)新手最常問(wèn)的問(wèn)題是「我該使用哪個(gè)算法」。要回答這個(gè)問(wèn)題需要考慮很多因素:(1)數(shù)據(jù)的大小,質(zhì)量和類(lèi)型;(2)完成計(jì)算所需要的時(shí)間;(3)任務(wù)的緊迫程度;(4)你需要對(duì)數(shù)據(jù)做什么處理。
在嘗試不同算法之前,就算一個(gè)經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家也不可能告訴你哪種算法性能最好。雖然還有很多其他的機(jī)器學(xué)習(xí)算法,但這里列舉的是最常用的幾種。如果你是一個(gè)機(jī)器學(xué)習(xí)的新手,這幾種是最好的學(xué)習(xí)起點(diǎn)。
via towardsdatascience.com,雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。