誰說選擇機器學習演算法沒有套路的?
版權聲明
本文首發於微信公眾號
這樣和數據相處(zw_life-long_doing)
無需授權即可轉載
轉載時請註明出處
雖說python只是我們進行數據挖掘和分析的其中一個工具,但前些天,我在解決一個分類問題的時候,就遇見了一個比較尷尬的情況:我到底應該選擇哪一個機器學習演算法來解決這個問題?
哈哈,我相信提到機器學習,你會有一點點懵逼,什麼是機器學習呀?
簡單的說,機器學習就是把無序的數據轉換成有用的信息。首先,我們要明確一點:絕大多數情況下,我們很難直接從原始數據本身獲得自己想要的信息。
比如說,你如何從幾百萬條郵件數據中知道,哪些是垃圾郵件?又比如說,從雙十一的交易數據中,你如何知道哪些消費者在六個月內會在同一家店鋪中重複購買?
很明顯,單單從這些數據的本身去看,你很難得到自己想要的答案。就拿檢測垃圾郵件來說,挨個檢測某個詞是否存在,可能沒有什麼意義。但如果幾個特定的詞同時出現的話,再輔以這條郵件的長度,其實很容易知道該郵件是否屬於垃圾郵件。
但總的來說,我們常見的機器學習,有四類:
監督學習;
無監督學習;
半監督學習;
強化學習。
具體的內容可以參見另一篇文章:《機器學習:探索雜亂無章的世界。》,所以這裡就談談目前比較常用的監督學習和無監督學習。
在監督學習中,機器學習的主要任務就是分類。即將實例數據劃分到合適的分類中。換句話說,就是按照一定標準,將某對象C,自動分到A和B或更多的對象中去。就比如上個例子說的垃圾郵件檢測,就是一個典型的分類問題,類似的,還有購物網站的個性化推薦等等。
除分類外,機器學習在監督學習中,還有一項任務:回歸。它主要是用於預測性數值型數據。這裡我相信大多數人或多或少見過數據擬合曲線,一條通過給定數據點的最優擬合曲線。它其實就是屬於回歸範疇,用來預測未知數據點大概率會落在這條擬合曲線的哪個位置。
而與監督學習相對應的便是無監督學習。這裡的數據沒有類別信息,也不會給定目標值,這是監督學習和無監督學習最大的區別。
在無監督學習中,有兩類演算法比較常用,一類是聚類,另一個是密度估計。聚類的作用是將數據集合,分成有類似對象組成的多個類的過程。物以類聚,人以群分嘛。而密度估計則是尋找描述數據統計值的過程。
你可能已經發現了,在上圖中有很多演算法都可用於解決同樣的問題,那精通其中一種演算法,是否可以處理所有的類似問題呢?
如何選擇合適的演算法
在選擇演算法的時候,有兩個問題是一定要考慮的:
使用機器學習演算法的目的是什麼?比如是預測明天下雨的概率還是對投票者按興趣分組。
需要分析或收集的數據是什麼?
首先,來談談使用演算法的目的。很簡單,先確定你是否想要預測目標變數的值。如果是,那就選擇監督學習演算法;如果不是,則選擇無監督學習演算法。
倘若我們選擇的是監督學習演算法,那麼,接下來而我們需要進一步的確定目標變數類型。如果目標變數是離散型數據,如是/否、1/2/3或紅/黃/黑等,則可以選擇分類演算法;如果目標變數是連續型的數值,如0~100、-999~999或-∞~+∞等,則需要選擇回歸演算法。
倘若我們選擇的是無監督學習演算法,我們進一步則需要分析是否需將數據劃分為離散的數據組。如果這是唯一的需求,則使用聚類演算法;如果還需要估計數據與每個分組的相似程度,那就使用密度估計演算法。
但要注意的是,上面的套路符合也只是大多數的情況,不是一層不變的。因為我們很可能會遇見使用分類演算法來處理回歸問題的情況。後面我會專門寫一篇文章來講這類特殊情況,這裡就不過多闡述了。
除了明確我們使用演算法的目的外,我們還需要考慮數據問題。換句話說,我們對實際數據了解得越充分,越容易創建符合實際需求的應用程序。一般情況下,我們應該了解數據的以下特徵(數據集中每列數據的特徵):
特徵值是離散型變數還是連續性變數;
特徵值中是否存在缺失的值;
是什麼原因造成了缺失;
數據中是否存在異常值;
某個特徵發生的頻率如何,是否罕見,等等。
充分的了解數據,其實不僅可以縮短我們選擇機器學習演算法的時間,也能讓我們在進行數據清洗的時候事半功倍。
客觀說,一般並不存在最好的演算法或者可以給出最好結果的演算法, 所以我們還是需要嘗試不同演算法的執行結果。對於我們所選的每種算,其實都可以使用其他的機器學習技術來改進其性能。一般說來,發現最好演算法的關鍵環節,是反覆試錯的迭代過程。
雖然說機器學習演算法各不相同,但是使用演算法的步驟卻是大致相同的,最後就來談談使用機器學習演算法的通用步驟。
使用演算法的通用步驟
1. 收集數據
有很多方法可以獲得樣本數據。比如爬蟲網頁數據、來自設備的實測數據等。
2. 準備輸入數據
得到數據之後,還須確保數據格式符合要求。比如說一些演算法要求目標變數和特徵值是字元串類型,而另一些演算法則可能要求是整型。
3. 分析輸入數據
這一步中,我們除了查看得到的數據是否為空值外,還需要看看數據中是否存在明顯的異常值。
通常情況下,用一維、二維或三維圖形展示數據是很不錯的方法。
4. 訓練演算法
根據機器學習演算法的不同,第4步和第5步是機器學習演算法的核心。因為在這一步,我們是將前兩步得到的格式化數據輸入到演算法裡面,通過演算法來抽取我們想要的信息。
但要注意的是,如果使用的是無監督學習演算法,由於它不存在目標變數值,所以也就不需要訓練演算法,直接進入到第5步。
5. 測試演算法
這一步將實際使用第4步中,通過機器學習演算法得到的信息。即實際測試演算法的工作效果。
對於監督學習,則已知用於評估演算法的目標變數值;對於無監督學習,也必須用其他手段來檢驗演算法的成功率。
但,無論是哪種情況,如果不滿意演算法的輸出結果,則返回第4步,改正演算法並加以測試。一般說來,問題常常會跟數據的收集和準備有關,這時就得跳回到第1步開始了。
6. 使用演算法
來到這一步,就可以將這個演算法封裝轉換成應用程序,執行實際任務了。但如果碰到了新的數據問題,同樣需要重複執行上述步驟。
總結一下,本文從如何選擇機器學習演算法,和應用演算法通用步驟這兩方面,講了機器學習演算法在從選擇到應用的相關套路,希望能對你有所幫助。
下一周,我會著重講講在數據清洗中,「特徵工程」的重要性和一般套路。敬請期待吧,嘿嘿。


TAG:機器學習 |