初學者碰上「機器學習」的第一道關卡:我應該使用哪種算法? | TechOrange 科技報橘
Search
Close this search box.

初學者碰上「機器學習」的第一道關卡:我應該使用哪種算法?

【我們為什麼挑選這篇文章】其實跑機器學習算法跟跑統計有一點點類似的地方,都必須遵從:找問題、試錯、更複雜的問題與方法下手。

而初學機器學習的分析師們一定會有的問題是:要用什麼算法。並不是全部的機器學習都會利用「窮舉」、「蒙地卡羅」這種方式,不懂的人看看有什麼算法,懂的人就看看先人是怎麼建議的吧!(責任編輯:陳君毅)

文:大數據文摘 bigdatadigest

如果你是一個初學/中等程度的數據科學家/分析師,並且想要將機器學習的算法運用到解決你關心的問題的上,那麼這篇文章正是為你寫的!

初學者面對各種機器學習算法,一個典型的問題是:我應該使用哪種算法?問題的答案取決於許多因素,包括:

數據的大小,質量和性質
可接受的計算時間
任務的緊迫性
你想用數據做什麼

即使是經驗豐富的數據科學家也無法在嘗試不同的算法之前,就斷定哪種算法會是最好的。在此我們並非倡導一蹴而就的方法,但是我們希望根據一些明確的因素,提供一些關於優先嘗試哪些算法的指導。

機器學習算法小抄表

這張機器學習算法小抄表幫助你從各種機器學習算法中完成選擇,以找到適合你的具體問題的算法。本文將詳細介紹如何使用這份小抄表。

由於該小抄表是專為入門級數據科學家和分析師設計的,所以在討論算法時,我們將作出一些簡化的假設。

這裡推薦的算法來自於一些數據科學家、機器學習專家和開發人員的編譯反饋和經驗指導。有幾個問題我們還沒有達成統一——對於這些問題,我們試圖突出共同點並調和差異。隨著我們的庫不斷增長以包含一套更完整的方法,其他算法也會被陸續添加進來。

如何使用小抄表

將圖表上的路徑和算法標籤解讀為「如果需要<路徑標籤> 則使用<算法>」。例如:

§ 如果需要<約減維度>,則使用<主成分分析>。

§ 如果需要<快速的數字預測>,則使用<決策樹>或<邏輯回歸>。

§ 如果需要<分層結果>,則使用<層次聚類>。

有時候會有多個分支適用,而有時候一個也沒有。重要的是,你要記住,這些路徑旨在作為經驗法則建議,因此有些建議並不准確。與我共同討論的幾位數據科學家說,找到最好算法的唯一方法就是嘗試所有的算法。

機器學習算法的類型

本節提供廣為流行的機器學習類型的概述。如果你已經熟悉這些算法,並希望繼續討論特定算法,則可以跳過本節並轉到下面的「何時使用特定算法」。

1. 監督學習(Supervised learning)

監督的學習算法基於一組樣本進行預測。例如,它可以使用歷史售價來估計未來售價。在監督學習裡,輸入變量包含帶標籤的訓練數據和你感興趣的某個輸出變量。通過某種算法分析訓練數據,就是一個學習將輸入映射到輸出的函數的過程。這個推斷函數對訓練數據進行泛化,即可預測未知情況下的結果,將新的未知輸入映射到輸出。

  • 分類:當數據用於預測分類變量時,監督學習也稱為分類。如將標籤或指示符,像狗/貓分配給一張圖片就是這種情況。當只有兩個標籤時稱為二分類。當有兩類以上時,稱為多分類。
  • 回歸:當預測連續值時,就是一個回歸問題。
  • 預測:這是根據過去和現在的數據對未來進行預測的過程。最常用來分析趨勢。一個常見的例子是根據今年和前幾年的銷售情況估計下一年的銷售額。

2. 半監督學習(Semi-supervised learning)

有監督學習的挑戰是標註數據的過程可能既昂貴又耗時。如果標籤有限,我們可以使用未標記的樣本來增強有監督學習。因為在這種情況下機器沒有被完全監督,所以我們說是它是半監督的。在半監督學習裡,我們同時使用未標記數據與少量標籤數據,從而提高學習準確性。

3. 無監督學習(Unsupervised learning)

執行無監督學習時,機器得到的是完全未標記的數據。這一算法常用於發現基礎數據的內在模式,如聚類結構,低維流形或稀疏樹/圖。

  • 聚類:對一組數據樣本做分組,使相似的樣本歸入一個組(或一個集群)中(根據某些標準)。這通常用於將整個數據集分成幾組,以便在每個組中進行分析,幫助用戶找到它們的內在模式。
  • 維度約減:減少需要考慮的變量數量。在許多應用中,原始數據具有非常高的維度特徵,並且一些特徵是冗餘的或與任務無關的。降低維度有助於找到真實的,潛在的關係。

4. 增強學習(Reinforcement learning)

增強學習基於環境的反饋,達到分析和優化代理(agent)行為的目的。機器嘗試不同的場景來發現哪些行為產生最大的回報,而不是被動接受行動指令。試錯和延遲獎勵將強化學習與其他技術區分開來。

選擇算法時的注意事項

選擇算法時,請務必考慮這些方面:準確度,訓練時間和易用性。許多用戶將準確度放在第一位,而初學者則傾向專注於他們最了解的算法上。

拿到數據集時,首先要考慮的是如何獲得結果,先不管這些結果怎麼樣。初學者傾向於選擇易於實現的算法,並可以快速獲得結果。只要能夠把這個當作整個過程的第一步,這樣做沒什麼不好。一旦獲得一些結果並熟悉數據後,你可以花更多時間,使用更複雜的算法來加強對數據的理解,從而進一步改進結果。

即使在這個階段,拿到最高精度的方法可能還不是最好的算法,因為算法通常需要精心調整和廣泛的訓練才能獲得最佳的性能。

何時使用特定的算法

更仔細地查看各個算法可以幫助了解它們的功能和使用方法。下文提供了更多的細節,並給出了什麼時候使用特定算法的提示,可以與小抄表對照著看。

線性回歸(Linear regression)和邏輯回歸(Logistic regression)

線性回歸是用於建模連續因變量 y 與一個或多個預測變量 X 之間的關係的方法。

y 和 X 之間的關係可以線性建模為 y =βTX+ε,給定訓練集{xi,yi} Ni = 1 ,(譯註:此處公式請查看原文,copy 到 word 時變形了,下文各數學符號和公式同)參數向量 β 可以學習得到。

如果因變量不是連續的而是分類的,則可以使用對數變換將線性回歸轉換為邏輯回歸。邏輯回歸是一種簡單、快速而強大的分類算法。這裡我們討論二分類的情況,其中因變量 y 只取二進制值 {yi∈(-1,1)} Ni = 1(它可以容易地擴展到多類分類問題)。

 

在邏輯回歸中,我們使用不同的假設類來嘗試預測給定示例屬於「1」類的概率,而不是它屬於「-1」類的概率。具體來說,我們將嘗試學習以下形式的函數:p(yi = 1 | xi)=σ(βTxi)和 p(yi = -1 | xi)= 1-σ(βTxi)。這裡 σ(x)= 1/(1 + exp(-x))是 S 形函數。給定訓練樣例{xi,yi} Ni = 1,參數向量 β 可以通過求給定數據集的 β 的對數最大似然值來得到。

線性支持向量機(Linear SVM)和內核支持向量機(Kernel SVM)

內核技巧用於將非線性可分離函數映射到更高維度的線性可分離函數中。支持向量機(SVM)找到由超平面的法向量 w 和偏差 b 表示的分類器。這個超平面(邊界)將不同的類用盡可能大的邊距分隔開來。問題就轉化為約束優化問題:

當各類之間線性不可分離時,可以使用內核技巧將非線性可分離空間映射到更高維度的線性可分離空間。

當大多數因變量是數字時,邏輯回歸和 SVM 應該是分類的第一個嘗試。這些模型易於實現,其參數易調,性能也相當不錯。所以這些模型適合初學者。

樹(Trees)和樹的組合(Ensemble trees)

決策樹,隨機森林和梯度提升決策樹都是基於決策樹的算法。決策樹有許多變體,但它們都做同樣的事情——將特徵空間細分為具有相同標籤的區域。決策樹易於理解和實施。然而,當非常深入地窮盡分支時,可能會過擬合。隨機森林和梯度提升決策樹是使用樹算法同時實現良好準確性、克服過擬合問題的兩種流行方式。

神經網絡(Neural networks)和深度學習(Deep learning)

20 世紀 80 年代中期,由於並行和分佈式處理能力,神經網絡蓬勃發展。但是,由於廣泛用於優化神經網絡參數的反向傳播訓練算法對之無效,這一領域的研究受阻。而支持向量機(SVM)等簡單模型,可以通過簡單訓練即可解決凸優化問題,逐漸取代神經網絡在機器學習中的位置。

近年來,新的、改進的訓練技術,如無監督的預訓練和分層貪婪訓練,復甦了人們對神經網絡的興趣。越來越強大的計算能力,如圖形處理單元(GPU)和大規模並行處理(MPP),也激發了神經網絡的複興。神經網絡的複興研究導致了具有數千層的模型的發明。

換句話說,淺層神經網絡已經演變成深度學習神經網絡。深層神經網絡對於有監督學習已經非常成功。當用於語音和圖像識別時,深度學習堪比人類,甚至比人類做得更好。應用於無監督的學習任務,如特徵提取,只需少量的人為干預,深度學習即可從原始圖像或語音中提取出特徵。

神經網絡由三部分組成:輸入層,隱層和輸出層。訓練樣本定義了輸入和輸出層。當輸出層是分類變量時,神經網絡可以用來解決分類問題。當輸出層是連續變量時,神經網絡可以用來做回歸。當輸出層與輸入層相同時,神經網絡可以用來提取內在特徵。隱層的數量定義了模型的複雜性和建模能力。

K-means / K-modes, 高斯混合模型聚類(GMM clustering)

K-means / k-modes、GMM 聚類旨在將 n 個觀察值分為 k 個群集。K-means 定義硬分配:樣本將與且僅與一個集群相關聯。而 GMM 為每個樣本定義一個軟分配,每個樣本具有與每個簇相關聯的概率。當給定簇 k 的數量時,兩種算法都簡單且夠快。

當沒有給出簇 k 的數量時,可以通過密度擴散連接樣本來使用 DBSCAN(基於密度的空間聚類)。

層級聚類(Hierarchical clustering)

層級聚類可以使用樹結構(樹形圖)來可視化層級劃分。它不需要輸入聚類的數量,並且可以使用不同的K來以不同的粒度(即,可以細化/粗化的簇)來查看分區(簇)。

主成分分析(PCA),奇異值分解(SVD)和隱狄利克雷劃分(LDA)

我們通常不想將大量的特徵直接扔到機器學習算法中,因為一些特徵可能是不相關的,或者「固有的」維度可能小於特徵的數量。主成分分析(PCA),奇異值分解(SVD)和隱狄利克雷劃分(LDA)均可用於降維。

PCA 是一種無監督的聚類方法,將原始數據空間映射到較低維數空間,同時保留盡可能多的信息。PCA 基本上找到一個最保留數據方差的子空間,其中子空間由數據協方差矩陣的主要特徵向量定義。

SVD 與 PCA 有親緣關係,因為中心數據矩陣(特徵與樣本)的 SVD 提供的主要左奇異向量也定義了與 PCA 相同的子空間。然而,SVD 是一種更通用的技術,因為它也可以做 PCA 做不了的事情。例如,一個用戶-電影的矩陣,通過 SVD 能夠提取可以在推薦系統中使用的用戶畫像和電影畫像。此外,SVD 也被廣泛應用於自然語言處理(NLP)中,充當主題建模工具,這一應用也被稱為潛在語義分析。

自然語言處理中一個相關技術是隱狄利克雷劃分(LDA)。LDA 是概率主題模型,正如高斯混合模型(GMM)將連續數據分解為高斯密度那樣,LDA 能將文檔分解為主題。與 GMM 不同的是,LDA 模型離散數據(文檔中的單詞),並且限制了主題根據 Dirichlet 分佈先驗分佈。

結論

這是一個易於遵循的工作流程。記住以下要點:

§ 定義問題。你想解決什麼問題?

§ 從簡單的算法開始。熟悉數據和基線結果。

§ 然後嘗試更複雜的東西。

SAS 可視化數據挖掘和機器學習平台為初學者提供一個學習和應用機器學習解決問題的良好平台。

 

——

(轉載大數據文摘作品,原文標題為 〈選擇困難症?一文通解如何選擇最合適的機器學習算法〉。圖片來源:pixabay, CC Licensed。)

延伸閱讀