選擇困難癥?一文通解如何選擇最合適的機器學(xué)習(xí)算法
如果你是一個初學(xué)/中等程度的數(shù)據(jù)科學(xué)家/分析師,并且想要將機器學(xué)習(xí)的算法運用到解決你關(guān)心的問題的上,那么這篇文章正是為你寫的!
初學(xué)者面對各種機器學(xué)習(xí)算法,一個典型的問題是:我應(yīng)該使用哪種算法?問題的答案取決于許多因素,包括:
- 數(shù)據(jù)的大小,質(zhì)量和性質(zhì)。
- 可接受的計算時間。
- 任務(wù)的緊迫性。
- 你想用數(shù)據(jù)做什么。
即使是經(jīng)驗豐富的數(shù)據(jù)科學(xué)家也無法在嘗試不同的算法之前,就斷定哪種算法會是***的。在此我們并非倡導(dǎo)一蹴而就的方法,但是我們希望根據(jù)一些明確的因素,提供一些關(guān)于優(yōu)先嘗試哪些算法的指導(dǎo)。
一、機器學(xué)習(xí)算法小抄表
這張機器學(xué)習(xí)算法小抄表幫助你從各種機器學(xué)習(xí)算法中完成選擇,以找到適合你的具體問題的算法。本文將詳細(xì)介紹如何使用這份小抄表。
由于該小抄表是專為入門級數(shù)據(jù)科學(xué)家和分析師設(shè)計的,所以在討論算法時,我們將作出一些簡化的假設(shè)。
這里推薦的算法來自于一些數(shù)據(jù)科學(xué)家、機器學(xué)習(xí)專家和開發(fā)人員的編譯反饋和經(jīng)驗指導(dǎo)。 有幾個問題我們還沒有達(dá)成統(tǒng)一——對于這些問題,我們試圖突出共同點并調(diào)和差異。
隨著我們的庫不斷增長以包含一套更完整的方法,其他算法也會被陸續(xù)添加進來。
二、如何使用小抄表
將圖表上的路徑和算法標(biāo)簽解讀為“如果需要 <路徑標(biāo)簽> 則使用 <算法>”。 例如:
- 如果需要<約減維度>,則使用<主成分分析>。
- 如果需要<快速的數(shù)字預(yù)測>,則使用<決策樹>或<邏輯回歸>。
- 如果需要<分層結(jié)果>,則使用<層次聚類>。
有時候會有多個分支適用,而有時候一個也沒有。重要的是,你要記住,這些路徑旨在作為經(jīng)驗法則建議,因此有些建議并不準(zhǔn)確。 與我共同討論的幾位數(shù)據(jù)科學(xué)家說,找到***算法的唯一方法就是嘗試所有的算法。
三、機器學(xué)習(xí)算法的類型
本節(jié)提供廣為流行的機器學(xué)習(xí)類型的概述。 如果你已經(jīng)熟悉這些算法,并希望繼續(xù)討論特定算法,則可以跳過本節(jié)并轉(zhuǎn)到下面的“何時使用特定算法”。
1. 監(jiān)督學(xué)習(xí)(Supervised learning)
監(jiān)督的學(xué)習(xí)算法基于一組樣本進行預(yù)測。例如,它可以使用歷史售價來估計未來售價。在監(jiān)督學(xué)習(xí)里,輸入變量包含帶標(biāo)簽的訓(xùn)練數(shù)據(jù)和你感興趣的某個輸出變量。通過某種算法分析訓(xùn)練數(shù)據(jù),就是一個學(xué)習(xí)將輸入映射到輸出的函數(shù)的過程。這個推斷函數(shù)對訓(xùn)練數(shù)據(jù)進行泛化,即可預(yù)測未知情況下的結(jié)果,將新的未知輸入映射到輸出。
- 分類:當(dāng)數(shù)據(jù)用于預(yù)測分類變量時,監(jiān)督學(xué)習(xí)也稱為分類。如將標(biāo)簽或指示符,像狗/貓分配給一張圖片就是這種情況。當(dāng)只有兩個標(biāo)簽時稱為二分類。當(dāng)有兩類以上時,稱為多分類。
- 回歸:當(dāng)預(yù)測連續(xù)值時,就是一個回歸問題。
- 預(yù)測:這是根據(jù)過去和現(xiàn)在的數(shù)據(jù)對未來進行預(yù)測的過程。最常用來分析趨勢。一個常見的例子是根據(jù)今年和前幾年的銷售情況估計下一年的銷售額。
2. 半監(jiān)督學(xué)習(xí)(Semi-supervised learning)
有監(jiān)督學(xué)習(xí)的挑戰(zhàn)是標(biāo)注數(shù)據(jù)的過程可能既昂貴又耗時。 如果標(biāo)簽有限,我們可以使用未標(biāo)記的樣本來增強有監(jiān)督學(xué)習(xí)。 因為在這種情況下機器沒有被完全監(jiān)督,所以我們說是它是半監(jiān)督的。 在半監(jiān)督學(xué)習(xí)里,我們同時使用未標(biāo)記數(shù)據(jù)與少量標(biāo)簽數(shù)據(jù),從而提高學(xué)習(xí)準(zhǔn)確性。
3. 無監(jiān)督學(xué)習(xí)(Unsupervised learning)
執(zhí)行無監(jiān)督學(xué)習(xí)時,機器得到的是完全未標(biāo)記的數(shù)據(jù)。這一算法常用于發(fā)現(xiàn)基礎(chǔ)數(shù)據(jù)的內(nèi)在模式,如聚類結(jié)構(gòu),低維流形或稀疏樹/圖。
- 聚類:對一組數(shù)據(jù)樣本做分組,使相似的樣本歸入一個組(或一個集群)中(根據(jù)某些標(biāo)準(zhǔn))。 這通常用于將整個數(shù)據(jù)集分成幾組,以便在每個組中進行分析,幫助用戶找到它們的內(nèi)在模式。
- 維度約減:減少需要考慮的變量數(shù)量。在許多應(yīng)用中,原始數(shù)據(jù)具有非常高的維度特征,并且一些特征是冗余的或與任務(wù)無關(guān)的。降低維度有助于找到真實的,潛在的關(guān)系。
4. 增強學(xué)習(xí)(Reinforcement learning)
增強學(xué)習(xí)基于環(huán)境的反饋,達(dá)到分析和優(yōu)化代理(agent)行為的目的。機器嘗試不同的場景來發(fā)現(xiàn)哪些行為產(chǎn)生***的回報,而不是被動接受行動指令。試錯和延遲獎勵將強化學(xué)習(xí)與其他技術(shù)區(qū)分開來。
四、選擇算法時的注意事項
選擇算法時,請務(wù)必考慮這些方面:準(zhǔn)確度,訓(xùn)練時間和易用性。許多用戶將準(zhǔn)確度放在***位,而初學(xué)者則傾向?qū)W⒂谒麄冏盍私獾乃惴ㄉ稀?/p>
拿到數(shù)據(jù)集時,首先要考慮的是如何獲得結(jié)果,先不管這些結(jié)果怎么樣。初學(xué)者傾向于選擇易于實現(xiàn)的算法,并可以快速獲得結(jié)果。只要能夠把這個當(dāng)作整個過程的***步,這樣做沒什么不好。一旦獲得一些結(jié)果并熟悉數(shù)據(jù)后,你可以花更多時間,使用更復(fù)雜的算法來加強對數(shù)據(jù)的理解,從而進一步改進結(jié)果。
即使在這個階段,拿到***精度的方法可能還不是***的算法,因為算法通常需要精心調(diào)整和廣泛的訓(xùn)練才能獲得***的性能。
五、何時使用特定的算法
更仔細(xì)地查看各個算法可以幫助了解它們的功能和使用方法。下文提供了更多的細(xì)節(jié),并給出了什么時候使用特定算法的提示,可以與小抄表對照著看。
1. 線性回歸(Linear regression)和邏輯回歸(Logistic regression)
線性回歸
邏輯回歸
線性回歸是用于建模連續(xù)因變量y與一個或多個預(yù)測變量X之間的關(guān)系的方法。 y和X之間的關(guān)系可以線性建模為y =βTX+ε,給定訓(xùn)練集{xi,yi} Ni = 1 ,(譯注:此處公式請查看原文,copy到word時變形了,下文各數(shù)學(xué)符號和公式同)參數(shù)向量β可以學(xué)習(xí)得到。
如果因變量不是連續(xù)的而是分類的,則可以使用對數(shù)變換將線性回歸轉(zhuǎn)換為邏輯回歸。邏輯回歸是一種簡單、快速而強大的分類算法。這里我們討論二分類的情況,其中因變量y只取二進制值{yi∈(-1,1)} Ni = 1(它可以容易地擴展到多類分類問題)。
在邏輯回歸中,我們使用不同的假設(shè)類來嘗試預(yù)測給定示例屬于“1”類的概率,而不是它屬于“-1”類的概率。具體來說,我們將嘗試學(xué)習(xí)以下形式的函數(shù):p(yi = 1 | xi)=σ(βTxi)和p(yi = -1 | xi)= 1-σ(βTxi)。這里 σ(x)= 1/(1 + exp(-x))是S形函數(shù)。給定訓(xùn)練樣例{xi,yi} Ni = 1,參數(shù)向量β可以通過求給定數(shù)據(jù)集的β的對數(shù)***似然值來得到。
SAS中的線性回歸
SAS中的邏輯回歸
2. 線性支持向量機(Linear SVM)和內(nèi)核支持向量機(Kernel SVM)
內(nèi)核技巧用于將非線性可分離函數(shù)映射到更高維度的線性可分離函數(shù)中。 支持向量機(SVM)找到由超平面的法向量w和偏差b表示的分類器。 這個超平面(邊界)將不同的類用盡可能大的邊距分隔開來。問題就轉(zhuǎn)化為約束優(yōu)化問題:
內(nèi)核技巧用于將非線性可分離函數(shù)映射到更高維度的線性可分離函數(shù)中
當(dāng)各類之間線性不可分離時,可以使用內(nèi)核技巧將非線性可分離空間映射到更高維度的線性可分離空間。
當(dāng)大多數(shù)因變量是數(shù)字時,邏輯回歸和SVM應(yīng)該是分類的***個嘗試。這些模型易于實現(xiàn),其參數(shù)易調(diào),性能也相當(dāng)不錯。所以這些模型適合初學(xué)者。
3. 樹(Trees)和樹的組合(Ensemble trees)
決策樹,隨機森林和梯度提升決策樹都是基于決策樹的算法。決策樹有許多變體,但它們都做同樣的事情——將特征空間細(xì)分為具有相同標(biāo)簽的區(qū)域。決策樹易于理解和實施。然而,當(dāng)非常深入地窮盡分支時,可能會過擬合。隨機森林和梯度提升決策樹是使用樹算法同時實現(xiàn)良好準(zhǔn)確性、克服過擬合問題的兩種流行方式。
4. 神經(jīng)網(wǎng)絡(luò)(Neural networks)和深度學(xué)習(xí)(Deep learning)
20世紀(jì)80年代中期,由于并行和分布式處理能力,神經(jīng)網(wǎng)絡(luò)蓬勃發(fā)展。但是,由于廣泛用于優(yōu)化神經(jīng)網(wǎng)絡(luò)參數(shù)的反向傳播訓(xùn)練算法對之無效,這一領(lǐng)域的研究受阻。而支持向量機(SVM)等簡單模型,可以通過簡單訓(xùn)練即可解決凸優(yōu)化問題,逐漸取代神經(jīng)網(wǎng)絡(luò)在機器學(xué)習(xí)中的位置。
近年來,新的、改進的訓(xùn)練技術(shù),如無監(jiān)督的預(yù)訓(xùn)練和分層貪婪訓(xùn)練,復(fù)蘇了人們對神經(jīng)網(wǎng)絡(luò)的興趣。 越來越強大的計算能力,如圖形處理單元(GPU)和大規(guī)模并行處理(MPP),也激發(fā)了神經(jīng)網(wǎng)絡(luò)的復(fù)興。神經(jīng)網(wǎng)絡(luò)的復(fù)興研究導(dǎo)致了具有數(shù)千層的模型的發(fā)明。
一個神經(jīng)網(wǎng)絡(luò)
換句話說,淺層神經(jīng)網(wǎng)絡(luò)已經(jīng)演變成深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。深層神經(jīng)網(wǎng)絡(luò)對于有監(jiān)督學(xué)習(xí)已經(jīng)非常成功。當(dāng)用于語音和圖像識別時,深度學(xué)習(xí)堪比人類,甚至比人類做得更好。應(yīng)用于無監(jiān)督的學(xué)習(xí)任務(wù),如特征提取,只需少量的人為干預(yù),深度學(xué)習(xí)即可從原始圖像或語音中提取出特征。
神經(jīng)網(wǎng)絡(luò)由三部分組成:輸入層,隱層和輸出層。訓(xùn)練樣本定義了輸入和輸出層。當(dāng)輸出層是分類變量時,神經(jīng)網(wǎng)絡(luò)可以用來解決分類問題。當(dāng)輸出層是連續(xù)變量時,神經(jīng)網(wǎng)絡(luò)可以用來做回歸。當(dāng)輸出層與輸入層相同時,神經(jīng)網(wǎng)絡(luò)可以用來提取內(nèi)在特征。隱層的數(shù)量定義了模型的復(fù)雜性和建模能力。
5. K-means / K-modes, 高斯混合模型聚類(GMM clustering)
高斯混合模型
K-means / k-modes、GMM聚類旨在將n個觀察值分為k個群集。 K-means定義硬分配:樣本將與且僅與一個集群相關(guān)聯(lián)。而GMM為每個樣本定義一個軟分配,每個樣本具有與每個簇相關(guān)聯(lián)的概率。當(dāng)給定簇k的數(shù)量時,兩種算法都簡單且夠快。
SAS可視分析中的聚類
一個DBSCAN圖像
當(dāng)沒有給出簇k的數(shù)量時,可以通過密度擴散連接樣本來使用DBSCAN(基于密度的空間聚類)。
6. 層級聚類(Hierarchical clustering)
層級聚類可以使用樹結(jié)構(gòu)(樹形圖)來可視化層級劃分。它不需要輸入聚類的數(shù)量,并且可以使用不同的K來以不同的粒度(即,可以細(xì)化/粗化的簇)來查看分區(qū)(簇)。
7. 主成分分析(PCA),奇異值分解(SVD)和隱狄利克雷劃分(LDA)
我們通常不想將大量的特征直接扔到機器學(xué)習(xí)算法中,因為一些特征可能是不相關(guān)的,或者“固有的”維度可能小于特征的數(shù)量。主成分分析(PCA),奇異值分解(SVD)和隱狄利克雷劃分(LDA)均可用于降維。
PCA是一種無監(jiān)督的聚類方法,將原始數(shù)據(jù)空間映射到較低維數(shù)空間,同時保留盡可能多的信息。 PCA基本上找到一個最保留數(shù)據(jù)方差的子空間,其中子空間由數(shù)據(jù)協(xié)方差矩陣的主要特征向量定義。
SVD與PCA有親緣關(guān)系,因為中心數(shù)據(jù)矩陣(特征與樣本)的SVD提供的主要左奇異向量也定義了與PCA相同的子空間。然而,SVD是一種更通用的技術(shù),因為它也可以做PCA做不了的事情。例如,一個用戶-電影的矩陣,通過SVD能夠提取可以在推薦系統(tǒng)中使用的用戶畫像和電影畫像。此外,SVD也被廣泛應(yīng)用于自然語言處理(NLP)中,充當(dāng)主題建模工具,這一應(yīng)用也被稱為潛在語義分析。
自然語言處理中一個相關(guān)技術(shù)是隱狄利克雷劃分(LDA)。 LDA是概率主題模型,正如高斯混合模型(GMM)將連續(xù)數(shù)據(jù)分解為高斯密度那樣,LDA能將文檔分解為主題。與GMM不同的是,LDA模型離散數(shù)據(jù)(文檔中的單詞),并且限制了主題根據(jù)Dirichlet分布先驗分布。
六、結(jié)論
這是一個易于遵循的工作流程。記住以下要點:
- 定義問題。 你想解決什么問題?
- 從簡單的算法開始。 熟悉數(shù)據(jù)和基線結(jié)果。
- 然后嘗試更復(fù)雜的東西。
SAS可視化數(shù)據(jù)挖掘和機器學(xué)習(xí)平臺為初學(xué)者提供一個學(xué)習(xí)和應(yīng)用機器學(xué)習(xí)解決問題的良好平臺。
來源:http://blogs.sas.com/content/subconsciousmusings/2017/04/12/machine-learning-algorithm-use/
【本文是51CTO專欄機構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】