初學(xué)者如何選擇合適的機(jī)器學(xué)習(xí)算法
本文主要的目標(biāo)讀者是機(jī)器學(xué)習(xí)愛好者或數(shù)據(jù)科學(xué)的初學(xué)者,以及對學(xué)習(xí)和應(yīng)用機(jī)器學(xué)習(xí)算法解決實(shí)際問題抱有濃厚興趣的讀者。面對大量的機(jī)器學(xué)習(xí)算法,初學(xué)者通常會問自己一個(gè)典型的問題:「我該使用哪一種算法?」有很多因素會影響這一問題的答案,比如:
- 數(shù)據(jù)的大小、質(zhì)量及性質(zhì)
- 可用計(jì)算時(shí)間
- 任務(wù)的急迫性
- 數(shù)據(jù)的使用用途
在沒有測試過不同算法之前,即使是經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)算法開發(fā)者也都不能分辨出哪種算法性能***。我們并不提倡一步到位,但是我們確實(shí)希望根據(jù)一些明確的因素為算法的選擇提供一些參考意見。
一、機(jī)器學(xué)習(xí)算法速查表
機(jī)器學(xué)習(xí)算法速查表可幫助你從大量算法之中篩選出解決你的特定問題的算法,同時(shí)本文也將介紹如何使用該速查表。
由于該速查表專門針對數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的初學(xué)者,所以在探討這些算法之時(shí),我們做了一些簡化的假設(shè)。本文中所有推薦的算法均來自于程序編譯反饋以及若干個(gè)數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)專家和開發(fā)者的建議。對于沒有達(dá)成一致意見的幾個(gè)問題,我們會著重求同存異。
二、速查表的使用方法
將閱讀速查表上的路徑和算法標(biāo)簽讀為「如果符合<路徑標(biāo)簽>,那么使用<算法>?!估纾?/p>
- 如果你想要降維,那么使用主成分分析。
- 如果你需要得到快速的數(shù)值型預(yù)測,那么使用決策樹或 logistic 回歸。
- 如果你需要層級結(jié)果,那么使用層級聚類。
有時(shí)會應(yīng)用不止一個(gè)分支,而有時(shí)又找不到一個(gè)***的匹配。重要的是這些路徑是基于經(jīng)驗(yàn)法則的推薦,因此其中一些并不精確。很多數(shù)據(jù)科學(xué)家說找到***算法的唯一確定方法就是嘗試所有算法。
三、機(jī)器學(xué)習(xí)算法的分類
這一章節(jié)將對***的機(jī)器學(xué)習(xí)分類做一個(gè)概覽,如果你對這些分類很熟悉,可直接跳至下文「什么時(shí)候使用具體算法」這一節(jié)。
1. 監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)算法基于一組樣本對作出預(yù)測。例如,以往銷售業(yè)績可以用來預(yù)測未來的價(jià)格走勢。借助監(jiān)督學(xué)習(xí),我們會有一組由標(biāo)注訓(xùn)練數(shù)據(jù)組成的輸入變量和一組希望預(yù)測的輸出變量。我們可以使用算法分析訓(xùn)練數(shù)據(jù)來學(xué)習(xí)一個(gè)將輸入映射到輸出的函數(shù)。算法推斷的函數(shù)可通過概括訓(xùn)練數(shù)據(jù)預(yù)測未知情景中的結(jié)果進(jìn)而預(yù)測未知的新實(shí)例。
- 分類:當(dāng)數(shù)據(jù)被用于預(yù)測類別時(shí),監(jiān)督學(xué)習(xí)也可處理這類分類任務(wù)。給一張圖片貼上貓或狗的標(biāo)簽就是這種情況。當(dāng)分類標(biāo)簽只有兩個(gè)時(shí),這就是二元分類;超過兩個(gè)則是多元分類。
- 回歸:當(dāng)預(yù)測為連續(xù)數(shù)值型時(shí),這就是一個(gè)回歸問題。
- 預(yù)測:這是一個(gè)基于過去和現(xiàn)在的數(shù)據(jù)預(yù)測未來的過程,其***應(yīng)用是趨勢分析。一個(gè)典型實(shí)例是根據(jù)今年和前年的銷售業(yè)績以預(yù)測下一年的銷售業(yè)績。
2. 半監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)的主要挑戰(zhàn)是標(biāo)注數(shù)據(jù)價(jià)格昂貴且非常耗時(shí)。如果標(biāo)簽有限,你可以使用非標(biāo)注數(shù)據(jù)來提高監(jiān)督學(xué)習(xí)。由于在這一情況中機(jī)器并非完全有監(jiān)督,所以稱之為半監(jiān)督。通過半監(jiān)督學(xué)習(xí),你可以使用只包含少量標(biāo)注數(shù)據(jù)的非標(biāo)注實(shí)例提升學(xué)習(xí)精確度。
3. 無監(jiān)督學(xué)習(xí)
在無監(jiān)督學(xué)習(xí)之中,機(jī)器完全采用非標(biāo)注數(shù)據(jù),其被要求發(fā)現(xiàn)隱藏在數(shù)據(jù)之下的內(nèi)在模式,比如聚類結(jié)構(gòu)、低維流形或者稀疏樹和圖。
- 聚類:把一組數(shù)據(jù)實(shí)例歸為一類,從而一個(gè)類(一個(gè)集群)之中的實(shí)例與其他類之中的實(shí)例更相似(根據(jù)一些指標(biāo)),其經(jīng)常被用于把整個(gè)數(shù)據(jù)集分割為若干個(gè)類。這種分析可在每一分類之中進(jìn)行,從而幫助用戶需要內(nèi)在模式。
- 降維:減少考慮的變量數(shù)量。在很多應(yīng)用中,原始數(shù)據(jù)有非常高的特征維度,并且一些特征是多余的且與任務(wù)不相關(guān)。降維將有助于發(fā)現(xiàn)真實(shí)、潛在的關(guān)系。
4. 強(qiáng)化學(xué)習(xí)
基于來自環(huán)境的反饋,強(qiáng)化學(xué)習(xí)分析和優(yōu)化智能體的行為。機(jī)器嘗試不同的策略,從而發(fā)現(xiàn)哪種行為能產(chǎn)生***的回報(bào),因此智能體不是被告知應(yīng)該采取哪種行為。試錯(cuò)和延遲的 reward 是將強(qiáng)化學(xué)習(xí)與其他技術(shù)區(qū)分的特點(diǎn)。
四、選擇算法的注意事項(xiàng)
當(dāng)選擇一個(gè)算法的時(shí)候,你要時(shí)刻牢記如下方面:精確性、訓(xùn)練時(shí)間和易用性。很多用戶將精確性置于首位,然而新手則傾向于選擇他們最了解的算法。
當(dāng)你有一個(gè)數(shù)據(jù)集后,***件需要考慮的事情就是如何獲得結(jié)果,無論這些結(jié)果可能會多么奇怪。新手傾向于選擇易于實(shí)現(xiàn)且能快速獲得結(jié)果的算法。這種思路僅在整個(gè)訓(xùn)練的***步過程中適用。一旦你獲得了一些結(jié)果并且開始逐漸熟悉數(shù)據(jù),你或許應(yīng)該花更多時(shí)間,使用更加復(fù)雜的算法來強(qiáng)化你對數(shù)據(jù)的理解,這樣方可改進(jìn)結(jié)果。
不過,即便到了這一步,達(dá)到***精度的標(biāo)準(zhǔn)算法也可能不是最合適的算法,這是因?yàn)橐粋€(gè)算法通常需要用戶細(xì)致的調(diào)參以及大范圍的訓(xùn)練才能獲得其***性能。
五、選擇具體算法的場景
對具體算法的深入研究可以幫助你理解它們的能力以及使用的方式。下面更多細(xì)節(jié)可為你選擇具體算法提供進(jìn)一步幫助,你可以配合前面速查表一起閱讀。
1. 線性回歸和 Logistic 回歸
線性回歸(linear regression)是一種對連續(xù)型因變量 y 與單個(gè)或多個(gè)特征 X 之間的關(guān)系進(jìn)行建模的方法。y 和 X 之間的關(guān)系可被線性建模成 如下形式:當(dāng)存在訓(xùn)練樣本時(shí),
,參數(shù)向量β可從訓(xùn)練樣本中學(xué)到。
如果因變量不連續(xù)且為類別,那么線性回歸可以轉(zhuǎn)為使用一個(gè) Sigmoid 函數(shù)的 logistic 回歸。logistic 回歸是一種簡便,快速而且強(qiáng)大的分類算法。這里討論二值情況,即因變量 y 只有兩個(gè)值 y∈(−1,1)(這可以很容易被擴(kuò)展為多類分類問題)。
在 logistic 回歸中,我們使用不同的假設(shè)類別來嘗試預(yù)測一個(gè)給定樣例是屬于「1」類還是「-1」類的概率。具體而言,我們將嘗試學(xué)習(xí)如下形式的一個(gè)函數(shù):以及
,其中
是一個(gè) sigmoid 函數(shù)。當(dāng)存在訓(xùn)練樣本 {xi,yi} 時(shí),參數(shù)向量β能在給定數(shù)據(jù)集下,***化 β 對數(shù)似然值來學(xué)習(xí)。
2. 線性 SVM 和核 SVM
核(kernel)技巧可被用于將非線性可分函數(shù)映射成高維的線性可分函數(shù)。支持向量機(jī)(SVM)訓(xùn)練算法可以找到由超平面的法向量 w 和偏置項(xiàng) b 表示的分類器。這個(gè)超平面(邊界)可以按照***間隔的方式來分開不同的類別。這個(gè)問題可以被轉(zhuǎn)換一個(gè)條件優(yōu)化問題:
Kernel 技巧被用于將非線性可分函數(shù)映射成高維的線性可分函數(shù)
當(dāng)類別不是線性可分的時(shí)候,核技巧可被用于將非線性可分空間映射到高維的線性可分空間。
當(dāng)因變量不是數(shù)值型時(shí),logistic 回歸和 SVM 應(yīng)該被用作分類的首要嘗試。這些模型可以輕松實(shí)現(xiàn),它們的參數(shù)易于調(diào)節(jié),而且其性能也相當(dāng)好。所以這些模型非常適合初學(xué)者。
3. 樹和集成樹
用于預(yù)測模型的決策樹
決策樹、隨機(jī)森林和梯度提升(gradient boosting)全都是基于決策樹的算法。決策樹有很多變體,但它們所做的事情都一樣——將特征空間細(xì)分為基本具有相同標(biāo)簽的區(qū)域。決策樹易于理解和實(shí)現(xiàn)。但是,它們往往會過擬合數(shù)據(jù),并且在樹上面走得非常深。隨機(jī)森林和梯度提升是兩種流行的使用樹算法來實(shí)現(xiàn)良好準(zhǔn)確度的集成方法,該兩種集成方法同時(shí)還能克服過擬合的問題。
4. 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)
一個(gè)卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)
神經(jīng)網(wǎng)絡(luò)憑借其并行和分布式處理的能力而在 1980 年代中期興起。但該領(lǐng)域的研究受到了反向傳播訓(xùn)練算法的低效性的阻礙,而反向傳播算法在神經(jīng)網(wǎng)絡(luò)參數(shù)的優(yōu)化上得到了廣泛的應(yīng)用。支持向量機(jī)(SVM)和其它更簡單的模型(可以通過解決凸優(yōu)化問題而輕松訓(xùn)練)逐漸在機(jī)器學(xué)習(xí)領(lǐng)域替代的神經(jīng)網(wǎng)絡(luò)。
在最近幾年,無監(jiān)督預(yù)訓(xùn)練和層次方式的貪婪訓(xùn)練等新的和改進(jìn)過的訓(xùn)練技術(shù)導(dǎo)致了人們對神經(jīng)網(wǎng)絡(luò)的興趣的復(fù)興。逐漸增強(qiáng)的計(jì)算能力(比如 GPU 和大規(guī)模并行處理(MPP))也促進(jìn)了神經(jīng)網(wǎng)絡(luò)的復(fù)興。神經(jīng)網(wǎng)絡(luò)研究的復(fù)興已經(jīng)為我們帶來了數(shù)千層的模型。
一種神經(jīng)網(wǎng)絡(luò)
換句話說,淺層神經(jīng)網(wǎng)絡(luò)已經(jīng)發(fā)展成了深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。深度神經(jīng)網(wǎng)絡(luò)已經(jīng)在監(jiān)督學(xué)習(xí)領(lǐng)域取得了巨大的成功。當(dāng)被用于語音識別和圖像識別,深度學(xué)習(xí)的水平已經(jīng)達(dá)到甚至超過了人類水平。當(dāng)被應(yīng)用于無監(jiān)督學(xué)習(xí)任務(wù)(比如特征提取)時(shí),深度學(xué)習(xí)也可以從原始圖像和語音中提取出特征,且僅需要非常少的人類干預(yù)。
神經(jīng)網(wǎng)絡(luò)由 3 個(gè)部分組成:輸入層、隱藏層和輸出層。當(dāng)輸出層是一個(gè)分類變量時(shí),那么該神經(jīng)網(wǎng)絡(luò)可以解決分類問題。當(dāng)輸出層是一個(gè)連續(xù)變量時(shí),那么該網(wǎng)絡(luò)可被用于執(zhí)行回歸。當(dāng)輸出層和輸入層一樣時(shí),該網(wǎng)絡(luò)可被用于提取內(nèi)在的特征。隱藏層的數(shù)量定義了模型復(fù)雜度和建模能力。
5. k-均值/k-模式、高斯混合模型(GMM)聚類
k-均值聚類
高斯混合模型
k-均值/k-模式,GMM 聚類的目標(biāo)是將 n 個(gè)觀察分區(qū)成 k 個(gè)集群。k-均值聚類定義為硬分配標(biāo)準(zhǔn):其樣本會被而且僅可被分配給一個(gè)集群。然而,GMM 可以為每個(gè)樣本定義一個(gè)軟分配(soft assignment)。每個(gè)樣本都有一個(gè)與每個(gè)集群相關(guān)的概率。當(dāng)給定了集群的數(shù)量 k 時(shí),這兩個(gè)算法都很簡單快速。
6. DBSCAN
DBSCAN 示意圖
當(dāng)聚類的數(shù)量 k 給定時(shí),可以通過密度擴(kuò)散(density diffusion)來連接樣本,從而使用 DBSCAN(基于密度的空間聚類(density-based spatial clustering))。
7. 層次聚類
層次分區(qū)可以使用樹結(jié)構(gòu)(樹形圖)來進(jìn)行可視化。其不需要集群的數(shù)量作為輸入,且其分區(qū)可以使用不同的 K 而在不同的粒度水平下查看(即可以細(xì)化/粗化集群)。
PCA、SVD 和 LDA
我們通常并不想直接給機(jī)器學(xué)習(xí)算法送入大量特征,因?yàn)橐恍┨卣骺赡苁菬o關(guān)的或者「固有的(intrinsic)」的維度可能少于特征的數(shù)量。主成分分析(PCA)、奇異值分解(Singular Value Decomposition)和隱狄利克雷分布(LDA)都可以被用于執(zhí)行降維。
PCA 是一種無監(jiān)督聚類方法,其可以將原有的數(shù)據(jù)空間映射到一個(gè)更低維的空間,同時(shí)還能保留盡可能多的信息。PCA 基本上是在尋找一個(gè)保留了***數(shù)據(jù)方差的子空間,且該子空間由數(shù)據(jù)的協(xié)方差矩陣的主要特征向量所定義。
SVD 和 PCA 有某種程度的聯(lián)系——中心數(shù)據(jù)矩陣的 SVD(特征 vs. 樣本)能提供定義由 PCA 所找到的同樣子空間的主左奇異向量(dominant left singular vectors)。但是,SVD 是一種更加通用的技術(shù),因?yàn)槠湟材茏鲆恍?PCA 可能做不到的事情。比如,一個(gè)用戶 vs. 電影矩陣的 SVD 可以提取用戶資料和電影資料,然后將其用在推薦系統(tǒng)中。此外,SVD 也被廣泛用作主題建模工具,在自然語言處理領(lǐng)域被稱為潛在語義分析。
自然語言處理領(lǐng)域的一個(gè)相關(guān)技術(shù)是隱狄利克雷分布(LDA)。LDA 是概率主題模型,其可以將文檔分解為主題,分解方式就像高斯混合模型(GMM)將連續(xù)數(shù)據(jù)分解成高斯密度(Gaussian densities)。不同于 GMM,LDA 建模的是離散數(shù)據(jù)(文檔中的詞),并且會限制其主題以按狄利克雷分布而先驗(yàn)地分布。
六、結(jié)論
這是一個(gè)易于掌握的工作流程。當(dāng)你在嘗試一個(gè)新問題時(shí),其中的關(guān)鍵信息是:
- 定義問題。你想要解決什么問題?
- 從簡單開始。熟悉你的數(shù)據(jù)和基準(zhǔn)結(jié)果。
- 然后嘗試更加復(fù)雜的東西。
原文:
http://blogs.sas.com/content/subconsciousmusings/2017/04/12/machine-learning-algorithm-use/
【本文是51CTO專欄機(jī)構(gòu)機(jī)器之心的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】