機(jī)器學(xué)習(xí)既是一門(mén)科學(xué),也是一種藝術(shù)??v觀各類(lèi)機(jī)器學(xué)習(xí)算法,并沒(méi)有一種普適的解決方案或方法,。事實(shí)上,有幾個(gè)因素會(huì)影響你對(duì)機(jī)器學(xué)習(xí)算法的選擇。
有些問(wèn)題是非常特別的,需要用一種特定的解決方法,。例如,如果你對(duì)推薦系統(tǒng)有所了解,,你會(huì)發(fā)現(xiàn)它是一類(lèi)很常用的機(jī)器學(xué)習(xí)算法,用來(lái)解決一類(lèi)非常特殊的問(wèn)題,。而其它的一些問(wèn)題則非常開(kāi)放,,可能需要一種試錯(cuò)方法(例如:強(qiáng)化學(xué)習(xí))。監(jiān)督學(xué)習(xí),、分類(lèi),、回歸等問(wèn)題都是非常開(kāi)放的,可以被用于異常檢測(cè)或建立更加廣泛的預(yù)測(cè)模型,。
此外,,我們?cè)谶x擇機(jī)器學(xué)習(xí)算法時(shí)所做出的一些決定與算法的優(yōu)化或技術(shù)層面關(guān)系并不大,而更多地與業(yè)務(wù)決策相關(guān),。下面,,讓我們一起來(lái)看看有哪些因素能幫你縮小機(jī)器學(xué)習(xí)算法的選擇范圍。
數(shù)據(jù)科學(xué)過(guò)程
在你開(kāi)始研究不同的機(jī)器學(xué)習(xí)算法前,,你需要對(duì)自己擁有的數(shù)據(jù),、面對(duì)的問(wèn)題及相關(guān)約束有清晰的了解。
理解你的數(shù)據(jù)
當(dāng)我們決定使用哪種算法時(shí),,我們所擁有的數(shù)據(jù)的類(lèi)型和形態(tài)起著關(guān)鍵性的作用,。有些算法可以利用較小的樣本集合工作,而另一些算法則需要海量的樣本,。特定的算法對(duì)特定類(lèi)型的數(shù)據(jù)起作用,。例如,樸素貝葉斯算法對(duì)處理待分類(lèi)的輸入特別有效,,但是對(duì)于缺失值則一點(diǎn)都不敏感,。
因此,你需要做到:
了解你的數(shù)據(jù)
1. 查看總結(jié)統(tǒng)計(jì)和數(shù)據(jù)可視化的結(jié)果
百分比可以幫助你識(shí)別大多數(shù)數(shù)據(jù)的范圍
平均數(shù)和中位數(shù)可以描述集中趨勢(shì)
相關(guān)系數(shù)可以指出強(qiáng)的關(guān)聯(lián)性
2. 數(shù)據(jù)可視化
箱形圖可以識(shí)別出異常值
密度圖和直方圖可以顯示出數(shù)據(jù)的散布情況
散點(diǎn)圖可以描述二元關(guān)系
數(shù)據(jù)清洗
1. 處理缺失值。
缺失的數(shù)據(jù)對(duì)于某些模型的影響比對(duì)其它模型更大,。即使是對(duì)于那些被用于處理缺失數(shù)據(jù)的模型來(lái)說(shuō),,它們也可能對(duì)缺失數(shù)據(jù)很敏感(某些變量的缺失數(shù)據(jù)可能導(dǎo)致預(yù)測(cè)性能變差)
2. 選擇處理異常值的方法
異常值在多維數(shù)據(jù)中十分常見(jiàn)。
有些模型對(duì)異常值的敏感性比其它模型要低,。通常而言,,樹(shù)模型對(duì)于異常值的存在不太敏感。然而回歸模型,、或者任何試圖使用方程的模型都會(huì)受到異常值的嚴(yán)重影響,。
異常值可能是糟糕的數(shù)據(jù)收集造成的,也可能是合理的極值,。
3. 數(shù)據(jù)需要被聚合嗎,?
數(shù)據(jù)增強(qiáng)
1.特征工程是從原始數(shù)據(jù)中產(chǎn)生能夠被用于建模的數(shù)據(jù)的過(guò)程,可以起到以下幾種作用:
使模型更容易被解釋?zhuān)ㄈ鐢?shù)據(jù)分箱(binning))
捕獲更復(fù)雜的關(guān)系(如神經(jīng)網(wǎng)絡(luò))
減少數(shù)據(jù)冗余并降低數(shù)據(jù)維度(如主成分分析(PCA))
重新縮放變量(如標(biāo)準(zhǔn)化或歸一化)
2. 不同的模型可能有不同的特征工程的要求,。有的模型有內(nèi)置的特征工程,。
對(duì)問(wèn)題進(jìn)行分類(lèi)
下一步是對(duì)問(wèn)題進(jìn)行分類(lèi)。這是一個(gè)需要分兩步實(shí)現(xiàn)的過(guò)程,。
1. 根據(jù)輸入分類(lèi):
如果你擁有的是帶標(biāo)簽的數(shù)據(jù),,那么這就是一個(gè)監(jiān)督學(xué)習(xí)問(wèn)題。
如果你擁有的是未標(biāo)注過(guò)的數(shù)據(jù),,并且希望從中找到有用的結(jié)構(gòu),,那么這就是一個(gè)無(wú)監(jiān)督學(xué)習(xí)問(wèn)題。
如果你想要通過(guò)與環(huán)境的交互來(lái)優(yōu)化一個(gè)目標(biāo)函數(shù),,那么這就是一個(gè)強(qiáng)化學(xué)習(xí)問(wèn)題,。
2. 根據(jù)輸出分類(lèi):
如果模型的輸出是一個(gè)(連續(xù)的)數(shù)字,那么這就是一個(gè)回歸問(wèn)題,。
如果模型的輸出是一個(gè)類(lèi)別,,那么這就是一個(gè)分類(lèi)問(wèn)題。
如果模型的輸出是一組用輸入數(shù)據(jù)劃分出的簇,,那么這就是一個(gè)聚類(lèi)問(wèn)題,。
你想發(fā)現(xiàn)一個(gè)異常點(diǎn)嗎?此時(shí)你面對(duì)的就是一個(gè)異常檢測(cè)問(wèn)題,。
理解你要滿足的約束條件
你需要考慮你能夠存儲(chǔ)數(shù)據(jù)的容量有多大,?這取決于系統(tǒng)的存儲(chǔ)容量,你可能無(wú)法存儲(chǔ)若干 GB 大小的分類(lèi),、回歸模型或者若干 GB 的用于聚類(lèi)分析的數(shù)據(jù),。例如,在嵌入式系統(tǒng)中,,你就會(huì)面臨這種情況,。
對(duì)預(yù)測(cè)過(guò)程的速度是否有要求?在實(shí)時(shí)應(yīng)用中,很顯然,,盡快得出預(yù)測(cè)結(jié)果是十分重要的,。例如,在自動(dòng)駕駛問(wèn)題中,,應(yīng)用必須盡可能快地對(duì)道路標(biāo)志進(jìn)行分類(lèi),,以免發(fā)生交通事故。
對(duì)學(xué)習(xí)過(guò)程的速度是否有要求,?在某些情況下,,快速訓(xùn)練模型是十分必要的:有時(shí),你需要使用不同的數(shù)據(jù)集快速地實(shí)時(shí)更新你的模型,。
尋找可用的算法
當(dāng)對(duì)自己的任務(wù)環(huán)境有了一個(gè)清晰的認(rèn)識(shí)后,,你就可以使用你所掌握的工具確定適用于待解決的問(wèn)題并切實(shí)可行的算法。一些影響你選擇模型的因素如下:
模型是否滿足業(yè)務(wù)目標(biāo)
模型需要多少數(shù)據(jù)預(yù)處理工作
模型有多準(zhǔn)確
模型的可解釋性如何
模型運(yùn)行的速度有多快:構(gòu)造模型需要多久,?模型做出預(yù)測(cè)需要多長(zhǎng)時(shí)間,?
模型的可伸縮性如何
模型的復(fù)雜度是一個(gè)影響算法選擇的重要標(biāo)準(zhǔn)。一般來(lái)說(shuō),,一個(gè)更復(fù)雜的模型具備下列特征:
它依賴于更多的特征進(jìn)行學(xué)習(xí)和預(yù)測(cè)(例如,,使用十個(gè)而不是兩個(gè)特征來(lái)預(yù)測(cè)目標(biāo))
它依賴于更復(fù)雜的特征工程(例如,使用多項(xiàng)式特征,、交互特征或主成分)
它有更大的計(jì)算開(kāi)銷(xiāo)(例如,,需要一個(gè)由 100 棵決策樹(shù)組成的隨機(jī)森林,,而不是一棵單獨(dú)的決策樹(shù))
除此之外,,同樣的機(jī)器學(xué)習(xí)算法可以基于參數(shù)的個(gè)數(shù)和某些超參數(shù)的選擇而變得更加復(fù)雜。例如:
回歸模型可以擁有更多的特征,,或者多項(xiàng)式項(xiàng)和交互項(xiàng),。
決策樹(shù)可以擁有更大或更小的深度。
將相同的算法變得更加復(fù)雜增加了發(fā)生過(guò)擬合的幾率,。
常用的機(jī)器學(xué)習(xí)算法
線性回歸
這可能是機(jī)器學(xué)習(xí)中最簡(jiǎn)單的算法,。例如,當(dāng)你想要計(jì)算一些連續(xù)值,,而不是將輸出分類(lèi)時(shí),,可以使用回歸算法。因此,,當(dāng)你需要預(yù)測(cè)一個(gè)正在運(yùn)行的過(guò)程未來(lái)的值時(shí),,你可以使用回歸算法。然而,,當(dāng)特征冗余,,即如果存在多重共線性(multicollinearity)時(shí),線性回歸就不太穩(wěn)定。
在下列情況下可以考慮使用線性回歸:
從一個(gè)地方移動(dòng)到另一個(gè)地方所需的時(shí)間
預(yù)測(cè)下個(gè)月某種產(chǎn)品的銷(xiāo)售情況
血液中的酒精含量對(duì)協(xié)調(diào)能力的影響
預(yù)測(cè)每個(gè)月禮品卡的銷(xiāo)售情況,,并改善年收入的估算
Logistic 回歸
Logistic 回歸執(zhí)行二進(jìn)制分類(lèi),,因此輸出二值標(biāo)簽。它將特征的線性組合作為輸入,,并且對(duì)其應(yīng)用非線性函數(shù)(sigmoid),,因此它是一個(gè)非常小的神經(jīng)網(wǎng)絡(luò)的實(shí)例。
logistic 回歸提供了許多方法對(duì)你的模型進(jìn)行正則化處理,,因此正如在樸素貝葉斯算法中那樣,,你不必?fù)?dān)心你的特征是否相關(guān)。該模型還有一個(gè)很好的概率化的解釋,。不像在決策樹(shù)或者支持向量機(jī)中那樣,,你可以很容易地更新你的模型以獲取新的數(shù)據(jù)。如果你想要使用一個(gè)概率化的框架,,或者你希望在未來(lái)能夠快速地將更多的訓(xùn)練數(shù)據(jù)融合到你的模型中,,你可以使用 logistic 回歸算法。logistic 回歸還可以幫助你理解預(yù)測(cè)結(jié)果背后起作用的因素,,它不完全是一個(gè)黑盒方法,。
在下列情況下可以考慮使用 logistic 回歸算法:
預(yù)測(cè)客戶流失
信用評(píng)分和欺詐檢測(cè)
評(píng)價(jià)市場(chǎng)營(yíng)銷(xiāo)活動(dòng)的效果
決策樹(shù)
決策樹(shù)很少被單獨(dú)使用,但是不同的決策樹(shù)可以組合成非常高效的算法,,例如隨機(jī)森林或梯度提升樹(shù)算法,。
決策樹(shù)很容易處理特征交互,并且決策樹(shù)是一種非參數(shù)模型,,所以你不必?fù)?dān)心異常值或者數(shù)據(jù)是否是線性可分的,。決策樹(shù)算法的一個(gè)缺點(diǎn)是,它們不支持在線學(xué)習(xí),,因此當(dāng)你要使用新的樣本時(shí),,你不得不重新構(gòu)建決策樹(shù)。決策樹(shù)的另一個(gè)缺點(diǎn)是,,它很容易發(fā)生過(guò)擬合,,而這就是像隨機(jī)森林(或提升樹(shù))這樣的集成學(xué)習(xí)方法能夠派上用場(chǎng)的地方。決策樹(shù)也需要大量的內(nèi)存空間(擁有的特征越多,,你的決策樹(shù)可能會(huì)越深,、越大)
決策樹(shù)能夠很好地幫助你在諸多行動(dòng)路徑中做出選擇:
做出投資決策
預(yù)測(cè)客戶流失
找出可能拖欠銀行貸款的人
在「建造」和「購(gòu)買(mǎi)」兩種選擇間進(jìn)行抉擇
銷(xiāo)售主管的資質(zhì)審核
K-均值
有時(shí),你完全沒(méi)有數(shù)據(jù)的標(biāo)簽信息,,并且你的目的是根據(jù)對(duì)象的特征來(lái)為其打上標(biāo)簽,。這種問(wèn)題被稱(chēng)為聚類(lèi)任務(wù)。聚類(lèi)算法可以在這種情況下被使用:例如,,當(dāng)你有一大群用戶,,你希望根據(jù)他們共有的一些屬性將其劃分到一些特定的組中,。
如果在你的問(wèn)題聲明中有這樣的問(wèn)題:例如,找出一群個(gè)體的組織形式,,或?qū)⒛承〇|西分組,,或找出特定的組。這時(shí),,你就應(yīng)該使用聚類(lèi)算法,。
該方法最大的缺點(diǎn)是,K-均值算法需要提前知道你的數(shù)據(jù)會(huì)有多少簇,,因此這可能需要進(jìn)行大量的試驗(yàn)去「猜測(cè)」我們最終定義的簇的最佳個(gè)數(shù)——K,。
主成分分析(PCA)
主成分分析能夠?qū)?shù)據(jù)進(jìn)行降維。有時(shí),,你擁有各種各樣的特征,,這些特征之間的相關(guān)性可能很高,而模型如果使用如此大量的數(shù)據(jù)可能會(huì)產(chǎn)生過(guò)擬合現(xiàn)象,。這時(shí),,你可以使用主成分分析(PCA)技術(shù)。
主成分分析(PCA)能夠起作用的關(guān)鍵因素是:除了低維的樣本表征,,它還提供了各種變量的一種同步的低維表征,。同步的樣本和變量的表征提供了一種能夠可視化地找到能夠表示一組樣本的特征的變量的方法。
支持向量機(jī)
支持向量機(jī)(SVM)是一種在模式識(shí)別和分類(lèi)問(wèn)題中被廣泛應(yīng)用的監(jiān)督機(jī)器學(xué)習(xí)技術(shù)——當(dāng)你的數(shù)據(jù)恰好有兩類(lèi)時(shí),。
支持向量機(jī)準(zhǔn)確率高,,對(duì)于防止過(guò)擬合很好的理論保障。當(dāng)你使用一個(gè)合適的核函數(shù)時(shí),,即使你的數(shù)據(jù)在基(低維)特征空間中是線性不可分的,,他們也可以很好地工作。支持向量機(jī)在文本分類(lèi)問(wèn)題中非常流行,,在該問(wèn)題中,,輸入是一個(gè)維度非常高的空間是很正常的,。然而,,SVM 是一種內(nèi)存密集型算法,它很難被解釋?zhuān)⑶覍?duì)其進(jìn)行調(diào)優(yōu)十分困難,。
在下列現(xiàn)實(shí)世界的應(yīng)用中,,你可以使用支持向量機(jī):
發(fā)現(xiàn)患有糖尿病等常見(jiàn)疾病的人
手寫(xiě)字符識(shí)別
文本分類(lèi)——將文章按照話題分類(lèi)
股票市場(chǎng)價(jià)格預(yù)測(cè)
樸素貝葉斯
這是一種基于貝葉斯定理的分類(lèi)技術(shù),它很容易構(gòu)建,,非常適用于大規(guī)模數(shù)據(jù)集,。除了結(jié)構(gòu)簡(jiǎn)單,據(jù)說(shuō)樸素貝葉斯的表現(xiàn)甚至比一些復(fù)雜得多的分類(lèi)方法更好,。當(dāng) CPU 和內(nèi)存資源有限時(shí),,樸素貝葉斯算法也是一個(gè)很好的選項(xiàng),。
樸素貝葉斯非常簡(jiǎn)單,你僅僅是在做大量的計(jì)數(shù)工作,。如果樸素貝葉斯的條件獨(dú)立假設(shè)確實(shí)成立,,樸素貝葉斯分類(lèi)器的收斂速度會(huì)比 logistic 回歸這樣的判別模型更快,因此需要的訓(xùn)練數(shù)據(jù)更少,。即使樸素貝葉斯的假設(shè)不成立,,樸素貝葉斯分類(lèi)器往往也能很好地完成任務(wù)。如果你想使用一種快速的,、簡(jiǎn)單的,、性能也不錯(cuò)的模型,樸素貝葉斯是一個(gè)很好的選擇,。這種算法最大的缺點(diǎn)就是它不能學(xué)習(xí)到特征之間的相互作用,。
在下列真實(shí)世界的應(yīng)用中,你可以使用樸素貝葉斯:
情感分析和文本分類(lèi)
類(lèi)似于 Netflix,、Amazon 這樣的推薦系統(tǒng)
識(shí)別垃圾郵件
人臉識(shí)別
隨機(jī)森林
隨機(jī)森林是一種決策樹(shù)的集成方法,。它能夠同時(shí)解決具有大規(guī)模數(shù)據(jù)集的回歸問(wèn)題和分類(lèi)問(wèn)題,還有助于從數(shù)以千計(jì)的輸入變量中找出最重要的變量,。隨機(jī)森林具有很強(qiáng)的可伸縮性,,它適用于任何維數(shù)的數(shù)據(jù),并且通常具有相當(dāng)不錯(cuò)的性能,。此外,,還有一些遺傳算法,它們可以在具有最少的關(guān)于數(shù)據(jù)本身的知識(shí)的情況下,,很好地?cái)U(kuò)展到任何維度和任何數(shù)據(jù)上,,其中最簡(jiǎn)單的實(shí)現(xiàn)就是微生物遺傳算法。然而,,隨機(jī)森林學(xué)習(xí)的速度可能會(huì)很慢(取決于參數(shù)設(shè)置),,并且這種方法不能迭代地改進(jìn)生成模型。
在下列現(xiàn)實(shí)世界的應(yīng)用中,,你可以使用隨機(jī)森林:
預(yù)測(cè)高?;颊?/p>
預(yù)測(cè)零件在生產(chǎn)中的故障
預(yù)測(cè)拖欠貸款的人
神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)中包含著神經(jīng)元之間連接的權(quán)重。這些權(quán)重是平衡的,,逐次對(duì)數(shù)據(jù)點(diǎn)進(jìn)行學(xué)習(xí),。當(dāng)所有的權(quán)重都被訓(xùn)練好后,如果需要對(duì)新給定的數(shù)據(jù)點(diǎn)進(jìn)行回歸,,神經(jīng)網(wǎng)絡(luò)可以被用于預(yù)測(cè)分類(lèi)結(jié)果或一個(gè)具體數(shù)值,。利用神經(jīng)網(wǎng)絡(luò),可以對(duì)特別復(fù)雜的模型進(jìn)行訓(xùn)練,,并且將其作為一種黑盒方法加以利用,,而在訓(xùn)練模型之前,,我們無(wú)需進(jìn)行不可預(yù)測(cè)的復(fù)雜特征工程。通過(guò)與「深度方法」相結(jié)合,,甚至可以采用更加不可預(yù)測(cè)的模型去實(shí)現(xiàn)新任務(wù),。例如,最近人們已經(jīng)通過(guò)深度神經(jīng)網(wǎng)絡(luò)大大提升了物體識(shí)別任務(wù)的結(jié)果,。深度學(xué)習(xí)還被應(yīng)用于特征提取這樣的非監(jiān)督學(xué)習(xí)任務(wù),,也可以在人為干預(yù)更少的情況下,從原始圖像或語(yǔ)音中提取特征,。
另一方面,,神經(jīng)網(wǎng)絡(luò)很難被解釋清楚,其參數(shù)設(shè)置也復(fù)雜地讓人難以置信,。此外,,神經(jīng)網(wǎng)絡(luò)算法也都是資源密集型和內(nèi)存密集型的。
SCIKIT 參考手冊(cè)
Scikit learning 為大家提供了一個(gè)非常深入的,、解釋地很清楚的流程圖,,它能夠幫助你選擇正確的算法。我認(rèn)為此圖十分方便,。
結(jié)論
一般來(lái)說(shuō),,你可以根據(jù)上面介紹的要點(diǎn)來(lái)篩選出一些算法,但是要想在一開(kāi)始就知道哪種方法最好是很難的,。你最好多迭代幾次選擇算法的過(guò)程,。將你的數(shù)據(jù)輸入給那些你確定的潛在優(yōu)秀機(jī)器學(xué)習(xí)算法,通過(guò)并行或串行的方式運(yùn)行這些算法,,最終評(píng)估算法性能,,從而選擇出最佳的算法。
在最后,,我想告訴你:為現(xiàn)實(shí)生活中的問(wèn)題找到正確的解決方案,,通常不僅僅是一個(gè)應(yīng)用數(shù)學(xué)方法的問(wèn)題。這要求我們對(duì)業(yè)務(wù)需求,、規(guī)則和制度,、相關(guān)利益者的關(guān)注點(diǎn)有所了解,并且具備大量的專(zhuān)業(yè)知識(shí),。在解決一個(gè)機(jī)器學(xué)習(xí)問(wèn)題的同時(shí),,能夠結(jié)合并平衡這些問(wèn)題是至關(guān)重要的,,那些能做到這一點(diǎn)的人可以創(chuàng)造最大的價(jià)值,。