3.機器學習演算法應用---演算法選擇

  通常說道演算法,可能大家更多的是聯想到各種貪心演算法,退火演算法,蟻群演算法,以及近些年來特別熱的機器學習和深度學習中的各種演算法。但是面對這些浩如繁星的演算法以及各種基礎演算法的變種,在面對具體問題時,如何選擇有效的演算法解決具體問題,是否有一些基本的處理問題的方法或者套路,本篇就大家梳理一下通常在面對具體問題時如何選擇演算法的問題。

(一)演算法基本知識

如上圖所示,演算法問題目前分為三大類,分別是監督學習、非監督學習和強化學習。

1. 監督學習:顧名思義,就是有監督信息的學習,這裡的監督信息指的是標籤信息。根據標籤信息學習的演算法就是監督學習,例如預測一張人臉圖片是否為男女的分類演算法,在訓練數據集中的男女標籤信息就是監督信息。

2. 非監督學習:非監督學習指的是不需要監督信息的學習演算法,典型的對社交軟體中人群愛好的劃分問題,根據社交軟體中統計的多維度用戶的愛好信息,將用戶分為不同的用戶群體。可以使用聚類方法解決這一問題,解決這過程不需要標籤信息。

3. 強化學習:就是通過演算法運行的結果在實際中的表現來衡量演算法輸出的優劣進而優化演算法。例如在指導用戶打flappy bird的遊戲中,如果演算法輸出的下一步遊戲未終止(還能玩,沒死掉)則判定當前的演算法輸出得到了一個獎賞得分,同理,如果遊戲終止,這演算法的輸出是一個懲罰得分。強化學習的演算法就是通過增大獎賞得分的概率,減少懲罰得分的概率的方向優化函數,使演算法達到自學習的目的。使每一步的輸出都是獎賞的輸出。

(二)根據解決問題進行劃分

  針對演算法實現的方式的分類對解決問題的幫助是有限的,因此這部分我們討論一些針對具體問題該使用那種類型的演算法。如上圖所示,預測一個類別就是分類問題,預測具體數值就是回歸問題,發現數據的結構信息就是聚類問題,發現數據的異常點,就是異常值檢測問題。如下詳細描述各個問題。

1. 預測類別:通過利用收集到的數據信息,來預測位置事件屬於那一類別的問題就是分類問題。例如通過分析歷史數據來預測明天是否會下雨的問題,就是典型的分類問題。

2. 回歸演算法:與分類問題很相似,只不過回歸問題用來預測具體的數值,例如根據歷史的數據信息來預測明天的氣溫就是典型的回歸問題。

3. 聚類演算法:發現數據的潛在規律,例如根據社交軟體中用戶的興趣愛好對社交人群進行劃分就是聚類問題,可以找出具有相似行為特徵的群體。

4. 異常檢測:對數據中存在明顯的異常信息進行檢測,例如信用卡交易數據中是否包含了異常交易數據,這部分就是找出數據中明顯與其他數據所表現的規律不同的信息。

(三)具體演算法選擇

  如上圖所示,在具體演算法選擇上,基於Python的scikit-learn機器學習演算法庫提供一套演算法選擇方法,參考這一部分(不局限於圖中的演算法和方法,由於這張圖大多考慮了scikit中演算法的實現情況)具體介紹一下演算法的選擇如下:

1. 首先統計數據的容量當數據過小(小於50條)時,建議收集更多的數據,因為過小的數據訓練的演算法容易受雜訊的影響比較大,演算法效果一般。

2. 判斷是否為預測一個類別的問題,如果是並且訓練數據中包含標籤信息則為分類問題。

3. 如果是預測一個類別的問題但是訓練數據中不包含標籤信息則是一個聚類問題

4. 如果不是一個分類問題,是預測一個具體的數值問題一般為回歸問題,如果不是預測具體數值對數據進行分析,挖掘數據中的異常值等問題,這時可以考慮一下是否為降維問題。

5. 對於分類問題,如果數據量小於100k,建議用線性SVM的方法,如果效果不好根據是否為文本信息考慮用貝葉斯方法或者K臨近分類法。如果數據量過大可以考慮加入正則化的方法來防止過擬合的問題來保證模型的穩定性。

6. 對於聚類問題,如果我們知道需要劃分的數據集個數一般使用Kmeans等聚類方法即可。如果無法獲知聚類的個數一般使用mean-shift的基於密度的演算法可以對模型進行聚類評估,

7. 對於回歸問題,如果數據量不大,直接使用SVM之類的回歸即可,當然如果數據量過大可以考慮使用L1,L2的正則化方法來對權值進行正則化來防止過擬合問題的出現。這部分演算法的選擇與分類問題很相似。

8. 對於降維問題,如果是考慮為分類問題的輸入維度進行削減,一般考慮LDA方法可以很好的對每個類別上的數據進行降維處理。如果單純對輸入維度進行降維,將原有維度信息轉移到新的維度(根據維度的正交化來達到降維的目的)一般使用PCA方法是比較主流的方法。

  對於演算法的選擇,有時不能找到確定的方法,也就是說很難根據數據是使用場景就完全鎖定了那一個具體的演算法,但是根據卻可以縮小到指定的幾個常用演算法。然後通過測試集和訓練集在這幾個演算法上做一些Demo。根據Demo反應的質量決定最終使用的演算法那個。看似比較費力,其實是比較穩妥和精準的方法。

  本篇帶大家回顧了一下演算法的分類和演算法一般能解決那些問題的基礎知識。然後根據具體的問題該如何選擇演算法和實現方式進行了分析和討論。這其中值得討論的問題,在有時間見的時候會再深入探討一下!

 個人看法,歡迎討論!


推薦閱讀:

多版本中文停用詞詞表 + 多版本英文停用詞詞表 + python詞表合併程序
SEO演算法之TF-IDF演算法
機器學習演算法系列--logistic回歸
製作假新聞?AI送你去喝茶!
鋼鐵直男的救世主來了!讓AI告訴你妹子到底是啥意思

TAG:演算法 | 機器學習 |