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