教程| 初學者如何選擇合適的機器學習算法(附速查表)

2021-01-11 機器之心Pro

選自sas機器之心編譯參與:黃小天、蔣思源、吳攀

本文主要的目標讀者是機器學習愛好者或數據科學的初學者,以及對學習和應用機器學習算法解決實際問題抱有濃厚興趣的讀者。面對大量的機器學習算法,初學者通常會問自己一個典型的問題:「我該使用哪一種算法?」有很多因素會影響這一問題的答案,比如:

數據的大小、質量及性質可用計算時間任務的急迫性數據的使用用途

在沒有測試過不同算法之前,即使是經驗豐富的數據科學家和機器學習算法開發者也都不能分辨出哪種算法性能最好。我們並不提倡一步到位,但是我們確實希望根據一些明確的因素為算法的選擇提供一些參考意見。

機器學習算法速查表

機器學習算法速查表可幫助你從大量算法之中篩選出解決你的特定問題的算法,同時本文也將介紹如何使用該速查表。

由於該速查表專門針對數據科學和機器學習的初學者,所以在探討這些算法之時,我們做了一些簡化的假設。本文中所有推薦的算法均來自於程序編譯反饋以及若干個數據科學家、機器學習專家和開發者的建議。對於沒有達成一致意見的幾個問題,我們會著重求同存異。

速查表的使用方法

將閱讀速查表上的路徑和算法標籤讀為「如果符合<路徑標籤>,那麼使用<算法>。」例如:

如果你想要降維,那麼使用主成分分析。如果你需要得到快速的數值型預測,那麼使用決策樹或 logistic 回歸。如果你需要層級結果,那麼使用層級聚類。

有時會應用不止一個分支,而有時又找不到一個完美的匹配。重要的是這些路徑是基於經驗法則的推薦,因此其中一些並不精確。很多數據科學家說找到最佳算法的唯一確定方法就是嘗試所有算法。

機器學習算法的分類

這一章節將對最流行的機器學習分類做一個概覽,如果你對這些分類很熟悉,可直接跳至下文「什麼時候使用具體算法」這一節。

監督學習

監督學習算法基於一組樣本對作出預測。例如,以往銷售業績可以用來預測未來的價格走勢。藉助監督學習,我們會有一組由標註訓練數據組成的輸入變量和一組希望預測的輸出變量。我們可以使用算法分析訓練數據來學習一個將輸入映射到輸出的函數。算法推斷的函數可通過概括訓練數據預測未知情景中的結果進而預測未知的新實例。

分類:當數據被用於預測類別時,監督學習也可處理這類分類任務。給一張圖片貼上貓或狗的標籤就是這種情況。當分類標籤只有兩個時,這就是二元分類;超過兩個則是多元分類。回歸:當預測為連續數值型時,這就是一個回歸問題。預測:這是一個基於過去和現在的數據預測未來的過程,其最大應用是趨勢分析。一個典型實例是根據今年和前年的銷售業績以預測下一年的銷售業績。

半監督學習

監督學習的主要挑戰是標註數據價格昂貴且非常耗時。如果標籤有限,你可以使用非標註數據來提高監督學習。由於在這一情況中機器並非完全有監督,所以稱之為半監督。通過半監督學習,你可以使用只包含少量標註數據的非標註實例提升學習精確度。

無監督學習

在無監督學習之中,機器完全採用非標註數據,其被要求發現隱藏在數據之下的內在模式,比如聚類結構、低維流形或者稀疏樹和圖。

聚類:把一組數據實例歸為一類,從而一個類(一個集群)之中的實例與其他類之中的實例更相似(根據一些指標),其經常被用於把整個數據集分割為若干個類。這種分析可在每一分類之中進行,從而幫助用戶需要內在模式。降維:減少考慮的變量數量。在很多應用中,原始數據有非常高的特徵維度,並且一些特徵是多餘的且與任務不相關。降維將有助於發現真實、潛在的關係。

強化學習

基於來自環境的反饋,強化學習分析和優化智能體的行為。機器嘗試不同的策略,從而發現哪種行為能產生最大的回報,因此智能體不是被告知應該採取哪種行為。試錯和延遲的 reward 是將強化學習與其他技術區分的特點。

選擇算法的注意事項

當選擇一個算法的時候,你要時刻牢記如下方面:精確性、訓練時間和易用性。很多用戶將精確性置於首位,然而新手則傾向於選擇他們最了解的算法。

當你有一個數據集後,第一件需要考慮的事情就是如何獲得結果,無論這些結果可能會多麼奇怪。新手傾向於選擇易於實現且能快速獲得結果的算法。這種思路僅在整個訓練的第一步過程中適用。一旦你獲得了一些結果並且開始逐漸熟悉數據,你或許應該花更多時間,使用更加複雜的算法來強化你對數據的理解,這樣方可改進結果。

不過,即便到了這一步,達到最高精度的標準算法也可能不是最合適的算法,這是因為一個算法通常需要用戶細緻的調參以及大範圍的訓練才能獲得其最佳性能。

選擇具體算法的場景

對具體算法的深入研究可以幫助你理解它們的能力以及使用的方式。下面更多細節可為你選擇具體算法提供進一步幫助,你可以配合前面速查表一起閱讀。

線性回歸和 Logistic 回歸

線性回歸(linear regression)是一種對連續型因變量 y 與單個或多個特徵 X 之間的關係進行建模的方法。y 和 X 之間的關係可被線性建模成 如下形式:當存在訓練樣本

時,

,參數向量β可從訓練樣本中學到。

如果因變量不連續且為類別,那麼線性回歸可以轉為使用一個 Sigmoid 函數的 logistic 回歸。logistic 回歸是一種簡便,快速而且強大的分類算法。這裡討論二值情況,即因變量 y 只有兩個值 y∈(1,1)(這可以很容易被擴展為多類分類問題)。

在 logistic 回歸中,我們使用不同的假設類別來嘗試預測一個給定樣例是屬於「1」類還是「-1」類的概率。具體而言,我們將嘗試學習如下形式的一個函數:

以及

,其中

是一個 sigmoid 函數。當存在訓練樣本 {xi,yi} 時,參數向量β能在給定數據集下,最大化 β 對數似然值來學習。

線性 SVM 和核 SVM

核(kernel)技巧可被用於將非線性可分函數映射成高維的線性可分函數。支持向量機(SVM)訓練算法可以找到由超平面的法向量 w 和偏置項 b 表示的分類器。這個超平面(邊界)可以按照最大間隔的方式來分開不同的類別。這個問題可以被轉換一個條件優化問題:

Kernel 技巧被用於將非線性可分函數映射成高維的線性可分函數

當類別不是線性可分的時候,核技巧可被用於將非線性可分空間映射到高維的線性可分空間。

當因變量不是數值型時,logistic 回歸和 SVM 應該被用作分類的首要嘗試。這些模型可以輕鬆實現,它們的參數易於調節,而且其性能也相當好。所以這些模型非常適合初學者。

樹和集成樹

用於預測模型的決策樹

決策樹、隨機森林和梯度提升(gradient boosting)全都是基於決策樹的算法。決策樹有很多變體,但它們所做的事情都一樣——將特徵空間細分為基本具有相同標籤的區域。決策樹易於理解和實現。但是,它們往往會過擬合數據,並且在樹上面走得非常深。隨機森林和梯度提升是兩種流行的使用樹算法來實現良好準確度的集成方法,該兩種集成方法同時還能克服過擬合的問題。

神經網絡和深度學習

一個卷積神經網絡架構

神經網絡憑藉其並行和分布式處理的能力而在 1980 年代中期興起。但該領域的研究受到了反向傳播訓練算法的低效性的阻礙,而反向傳播算法在神經網絡參數的優化上得到了廣泛的應用。支持向量機(SVM)和其它更簡單的模型(可以通過解決凸優化問題而輕鬆訓練)逐漸在機器學習領域替代的神經網絡。

在最近幾年,無監督預訓練和層次方式的貪婪訓練等新的和改進過的訓練技術導致了人們對神經網絡的興趣的復興。逐漸增強的計算能力(比如 GPU 和大規模並行處理(MPP))也促進了神經網絡的復興。神經網絡研究的復興已經為我們帶來了數千層的模型。

一種神經網絡

換句話說,淺層神經網絡已經發展成了深度學習神經網絡。深度神經網絡已經在監督學習領域取得了巨大的成功。當被用於語音識別和圖像識別,深度學習的水平已經達到甚至超過了人類水平。當被應用於無監督學習任務(比如特徵提取)時,深度學習也可以從原始圖像和語音中提取出特徵,且僅需要非常少的人類幹預。

神經網絡由 3 個部分組成:輸入層、隱藏層和輸出層。當輸出層是一個分類變量時,那麼該神經網絡可以解決分類問題。當輸出層是一個連續變量時,那麼該網絡可被用於執行回歸。當輸出層和輸入層一樣時,該網絡可被用於提取內在的特徵。隱藏層的數量定義了模型複雜度和建模能力。

k-均值/k-模式、高斯混合模型(GMM)聚類

k-均值聚類

高斯混合模型

k-均值/k-模式,GMM 聚類的目標是將 n 個觀察分區成 k 個集群。k-均值聚類定義為硬分配標準:其樣本會被而且僅可被分配給一個集群。然而,GMM 可以為每個樣本定義一個軟分配(soft assignment)。每個樣本都有一個與每個集群相關的概率。當給定了集群的數量 k 時,這兩個算法都很簡單快速。

DBSCAN

DBSCAN 示意圖

當聚類的數量 k 給定時,可以通過密度擴散(density diffusion)來連接樣本,從而使用 DBSCAN(基於密度的空間聚類(density-based spatial clustering))。

層次聚類

層次分區可以使用樹結構(樹形圖)來進行可視化。其不需要集群的數量作為輸入,且其分區可以使用不同的 K 而在不同的粒度水平下查看(即可以細化/粗化集群)。

PCA、SVD 和 LDA

我們通常並不想直接給機器學習算法送入大量特徵,因為一些特徵可能是無關的或者「固有的(intrinsic)」的維度可能少於特徵的數量。主成分分析(PCA)、奇異值分解(Singular Value Decomposition)和隱狄利克雷分布(LDA)都可以被用於執行降維。

PCA 是一種無監督聚類方法,其可以將原有的數據空間映射到一個更低維的空間,同時還能保留儘可能多的信息。PCA 基本上是在尋找一個保留了最大數據方差的子空間,且該子空間由數據的協方差矩陣的主要特徵向量所定義。

SVD 和 PCA 有某種程度的聯繫——中心數據矩陣的 SVD(特徵 vs. 樣本)能提供定義由 PCA 所找到的同樣子空間的主左奇異向量(dominant left singular vectors)。但是,SVD 是一種更加通用的技術,因為其也能做一些 PCA 可能做不到的事情。比如,一個用戶 vs. 電影矩陣的 SVD 可以提取用戶資料和電影資料,然後將其用在推薦系統中。此外,SVD 也被廣泛用作主題建模工具,在自然語言處理領域被稱為潛在語義分析。

自然語言處理領域的一個相關技術是隱狄利克雷分布(LDA)。LDA 是概率主題模型,其可以將文檔分解為主題,分解方式就像高斯混合模型(GMM)將連續數據分解成高斯密度(Gaussian densities)。不同於 GMM,LDA 建模的是離散數據(文檔中的詞),並且會限制其主題以按狄利克雷分布而先驗地分布。

結論

這是一個易於掌握的工作流程。當你在嘗試一個新問題時,其中的關鍵信息是:

定義問題。你想要解決什麼問題?從簡單開始。熟悉你的數據和基準結果。然後嘗試更加複雜的東西。

原文連結:http://blogs.sas.com/content/subconsciousmusings/2017/04/12/machine-learning-algorithm-use/

相關焦點

  • 很好很全面的《機器學習速查手冊》,公式、圖表都有,135頁pdf附下載!
    今天推薦一份開源的《機器學習速查手冊》,並且製作成了電子版 PDF,方便大家查閱~這份手冊最大的特點就是包含許多關於機器學習的經典公式和圖表,有助於您快速回憶有關機器學習的知識點。非常適合那些正在準備與機器學習相關的工作面試的人。
  • 微軟再推免費在線 Python 教程,面向數據科學和機器學習初學者
    去年九月,微軟曾面向 Python 初學者,推出了一套免費的教程視頻。從基本介紹和 VS Code 的配置講起,循序漸進語法概念等基礎內容講解。目前為止,該系列視頻播放量已達到將近 180 萬次。近日,微軟在此基礎上,再度更新兩個針對 Python 初學者的系列教程,作為對之前教程的補充,或者說是進階。因此,這兩個新的系列面向的不完全是純粹的 Python 新手,而是對 Python 稍有了解,並可能有其他語言的編碼經驗的人。
  • 淺談鋼琴初學者基本教程如何選擇?
    關於鋼琴初學者基本教程,眾說不一,或許大部分鋼琴老師制定的都不太一樣,本文只是討論某部分教材的特點和作用,只供小夥伴參考學習用,實際鋼琴培訓時一切以老師安排的為準。《湯普森淺易鋼琴教程》,也就是《小湯》,《小湯》是採用中央c入門法,一課學習一個音,逐步推進的方式,好處是幼兒會學得比較紮實,不好的是很長一個階段雙手擠在中央c周圍較窄音域彈奏;到第三冊之後出現技術課題不夠明確,句法、連線差強人意等情況。《約翰-湯普森現代鋼琴教程》,即《大湯》,《大湯》是為大一些的小孩編寫的入門教材,其優點是曲目非常豐富,活潑生動,而且選擇性多。
  • 機器學習初學者必須知道的十大算法
    還在為不知道學什麼算法入門機器學習感到頭疼?本文作者通過自身的學習向初學者介紹十大機器學習(ML)算法,並附有數字和實例以便於理解。哈佛商業評論稱數據科學家是21世紀最性感的工作。所以,對於那些ML剛剛開始的人來說,這篇博客機器學習算法工程師需要知道的十大算法是非常有用的。ML算法是可以從數據中學習並從中改進的算法,無需人工幹預。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    選自EliteDataScience機器之心編譯參與:蔣思源、晏奇在本教程中,作者對現代機器學習算法進行一次簡要的實戰梳理。雖然類似的總結有很多,但是它們都沒有真正解釋清楚每個算法在實踐中的好壞,而這正是本篇梳理希望完成的。因此本文力圖基於實踐中的經驗,討論每個算法的優缺點。而機器之心也在文末給出了這些算法的具體實現細節。
  • 小白學數據小抄放送 Python,R,大數據,機器學習
    小抄表是很實用的辦法,那麼今天我們就為大家送出一份大殺器:28張小抄表合輯!不管你是Python或R的初學者,還是SQL或機器學習的入門者,或者準備學習Hadoop,這裡都有能滿足你的資料。特別適合我這種初學者。 答:太好了!我們收到不少讀者反饋,希望推出更多小抄表的資料。我們這一期小白學數據專欄篩選了28份小抄,根據覆蓋面、清晰度和內容實用性,分別涵蓋了機器學習、數據科學、概率、SQL和大數據的領域。裡面包括了你所需要的工具、流程、各種包和語言。
  • ...走向機器學習「正道」:小朋友才迷信算法,大人們更重視工程實踐
    以下為王剛所撰寫的正文: 機器學習對很多初學者來說,最大的學習困難和障礙就是模型、算法、「眼花繚亂」的數學公式所帶來的抽象感,無法有效的建立起直覺上的理解。所以本文的目的是嘗試給初學者具體的學習方式建議,以幫助初學者打通機器學習的任督二脈,然後通過不斷的學習和實踐,使得自己在機器學習領域的專業能力持續提升。
  • 小白學數據28張小抄放送 Python,R,大數據,機器學習
    小抄表是很實用的辦法,那麼今天我們就為大家送出一份大殺器:28張小抄表合輯!不管你是Python或R的初學者,還是SQL或機器學習的入門者,或者準備學習Hadoop,這裡都有能滿足你的資料。12.機器學習小抄表 問:話說我剛開始學習機器學習算法。
  • 分享最適合新手入門的10種機器學習算法
    這樣就導致我們在面對一個問題時需要嘗試不同的算法,同時還要用測試的數據集來評估算法的性能,選出最合適的那一種。 當然,你所選的算法必須適合你的問題,就像當我們需要清理房子的時候,可以使用吸塵器、掃把或拖把,但不會用鏟子來挖地。
  • Python機器學習10:機器學習中的六種分類算法及實現(上)
    在機器學習中,可以使用多種算法模型解決同一個問題,那麼如何從中選擇出最佳的算法模型呢?當然,這個問題沒有一種固定的答案,需要根據不同的問題,嘗試使用多種機器學習方法,比較各種算法模型在該問題上的效果,最終才能決定究竟選擇哪一種模型。
  • 機器學習算法一覽(附python和R代碼)
    原標題:機器學習算法一覽(附python和R代碼) 如何加入我們? 寫這篇文章的目的,就是希望它可以讓有志於從事數據科學和機器學習的諸位在學習算法的路上少走些路。我會在文章中舉例一些機器學習的問題,你們也可以在思考解決這些問題的過程中得到啟發。我也會寫下對於各種機器學習算法的一些個人理解,並且提供R和Python的執行代碼。讀完這篇文章,讀者們至少可以行動起來親手試試寫一個機器學習的程序。
  • 如何用免費GPU學習AI算法?這篇算法資源大集錦別錯過
    上一次寫了篇薅GPU百度AI Studio計算資源的文章,收到很多AI算法初學者私信,問我能不能補充一些AI Studio的學習資源。有求必應向來是我的風格,於是我加入了AI Studio和飛槳(PaddlePaddle)開發者QQ群,為大家收集了一些資源,涵蓋了從入門到高階的各種常用算法和代碼。
  • 五分鐘了解機器學習十大算法
    本文為有志於成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。機器學習是該行業的一個創新且重要的領域。我們為機器學習程序選擇的算法類型,取決於我們想要實現的目標。現在,機器學習有很多算法。因此,如此多的算法,可能對於初學者來說,是相當不堪重負的。
  • 初學者怎麼選擇神經網絡環境?對比MATLAB、Torch和TensorFlow
    選自arXiv機器之心編譯參與:吳攀、蔣思源、李亞洲初學者在學習神經網絡的時候往往會有不知道從何處入手的困難,甚至可能不知道選擇什麼工具入手才合適。在此文檔中,我們只展現了一些簡單的用於上手人工神經網絡(ANN)的機器學習相關的工具。我們假設讀者有基礎知識,並把重點放在了進一步信息的官方文檔上。例如,你可以從 Matlab 的官網發現如何掌握該軟體的相關信息。確實,其許可證並非免費的,雖然大部分大學會為學生提供教學用許可證,但可能也無法獲取目前所有的程序包。
  • 流行的機器學習算法總結,幫助你開啟機器學習算法學習之旅
    定期將算法應用於新數據和新經驗的過程可提高機器學習的整體效率。機器學習算法對於與分類,預測建模和數據分析相關的各種任務至關重要。「機器學習方面的突破將價值十個微軟。」- Bill Gates機器學習算法的類型在本節中,我們將重點介紹現有的各種ML算法。
  • 機器學習算法盤點:人工神經網絡、深度學習
    機器學習算法盤點:人工神經網絡、深度學習 佚名 發表於 2016-08-01 16:26:33   機器學習無疑是當前數據分析領域的一個熱點內容。很多人在平時的工作中都或多或少會用到機器學習的算法。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • 基礎| 機器學習入門必備:如何用Python從頭實現感知器算法
    在本教程中,你將了解到如何利用 Python 從頭開始實現感知器算法。在完成本教程後,你將學會:如何訓練感知器的網絡權重如何利用感知器做出預測如何對於現實世界的分類問題實現感知器算法讓我們開始吧。概述本節簡要介紹了感知器算法和 Sonar 數據集,我們將會在後面應用。
  • 前端開發相關速查表Cheatsheets整理集合
    當然寫多了以後自然而然的查 API 文檔的次數就會越來越少。但是當剛進一個領域再回來後發現自己又是什麼都不懂。聰明的前端開發工程在乎的是寫程式的思維,而不API文檔。因為記住所有API幾乎是不可能的。速查表(Cheatsheets)裡頭存放著濃縮過後的精華,當你是個有經驗的人,使用 速查表(Cheatsheets)能夠幫自己快速的複習,並且用最短的時間讓自己恢復到開發狀態,因此常常會去搜集各個前端開發相關速查表(Cheatsheets)有利於我們快速開發,節省一些不必要的時間浪費。