機器學習常見算法總結
監督學習 Supervised Learning
線性迴歸算法
優點:
- 建模速度快,存儲資源低;
- 思想簡單,實現容易。建模迅速,對於小數據量、簡單的關係很有效;
-
是許多強大的非線性模型的基礎;
-
線性迴歸模型十分容易理解,結果具有很好的可解釋性,有利於決策分析;
-
蘊含機器學習中的很多重要思想。
-
能解決迴歸問題。
缺點:
- 對複雜數據擬合不好,欠擬合;
- 對異常值很敏感;
-
對於非線性數據或者數據特徵間具有相關性多項式迴歸難以建模.;
-
難以很好地表達高度複雜的數據。
彈性網絡迴歸的幾個關鍵點
- 它鼓勵在高度相關變量的情況下的羣體效應,而不是像Lasso那樣將其中一些置零。當多個特徵和另一個特徵相關的時候彈性網絡非常有用。Lasso 傾向於隨機選擇其中一個,而彈性網絡更傾向於選擇兩個;
- 對所選變量的數量沒有限制。
多項式迴歸的要點
- 能夠模擬非線性可分的數據;線性迴歸不能做到這一點。它總體上更靈活,可以模擬一些相當複雜的關係;
- 完全控制要素變量的建模(要設置變量的指數);
- 需要仔細的設計。需要一些數據的先驗知識才能選擇最佳指數;
- 如果指數選擇不當,容易過擬合。
嶺迴歸的要點
- 這種迴歸的假設與最小平方迴歸相同,不同點在於最小平方迴歸的時候,我們假設數據的誤差服從高斯分佈使用的是極大似然估計(MLE),在嶺迴歸的時候,由於添加了偏差因子,即w的先驗信息,使用的是極大後驗估計(MAP)來得到最終參數的;
- 它縮小了係數的值,但沒有達到零,這表明沒有特徵選擇功能。
Lasso迴歸的要點
嶺迴歸和Lasso迴歸之間存在一些差異,基本上可以歸結爲L2和L1正則化的性質差異:
- 內置的特徵選擇(Built-in feature selection):這是L1範數的一個非常有用的屬性,而L2範數不具有這種特性。這實際上因爲是L1範數傾向於產生稀疏係數。例如,假設模型有100個係數,但其中只有10個係數是非零係數,這實際上是說“其他90個變量對預測目標值沒有用處”。 而L2範數產生非稀疏係數,所以沒有這個屬性。因此,可以說Lasso迴歸做了一種“參數選擇”形式,未被選中的特徵變量對整體的權重爲0。
- 稀疏性:指矩陣(或向量)中只有極少數條目非零。 L1範數具有產生具有零值或具有很少大系數的非常小值的許多係數的屬性。
- 計算效率:L1範數沒有解析解,但L2範數有。這使得L2範數的解可以通過計算得到。然而,L1範數的解具有稀疏性,這使得它可以與稀疏算法一起使用,這使得在計算上更有效率。
KNN算法的要點
優點:
- KNN可以處理分類問題,同時天然可以處理多分類問題,比如鳶尾花的分類;
- 簡單,易懂,同時也很強大,對於手寫數字的識別,鳶尾花這一類問題來說,準確率很高
- KNN還可以處理迴歸問題,也就是預測
缺點:
- 效率低,因爲每一次分類或者回歸,都要把訓練數據和測試數據都算一遍,如果數據量很大的話,需要的算力會很驚人,但是在機器學習中,大數據處理又是很常見的一件事;
- 對訓練數據依賴度特別大,雖然所有機器學習的算法對數據的依賴度很高,但是KNN尤其嚴重,因爲如果我們的訓練數據集中,有一兩個數據是錯誤的,剛剛好又在我們需要分類的數值的旁邊,這樣就會直接導致預測的數據的不準確,對訓練數據的容錯性太差;
- 維數災難,KNN對於多維度的數據處理也不是很好。
-
算法優點:
(1)簡單,易於理解,易於實現,無需估計參數。
(2)訓練時間爲零。它沒有顯示的訓練,不像其它有監督的算法會用訓練集train一個模型(也就是擬合一個函數),然後驗證集或測試集用該模型分類。KNN只是把樣本保存起來,收到測試數據時再處理,所以KNN訓練時間爲零。
(3)KNN可以處理分類問題,同時天然可以處理多分類問題,適合對稀有事件進行分類。
(4)特別適合於多分類問題(multi-modal,對象具有多個類別標籤), KNN比SVM的表現要好。
(5)KNN還可以處理迴歸問題,也就是預測。
(6)和樸素貝葉斯之類的算法比,對數據沒有假設,準確度高,對異常點不敏感。
算法缺點:
(1)計算量太大,尤其是特徵數非常多的時候。每一個待分類文本都要計算它到全體已知樣本的距離,才能得到它的第K個最近鄰點。
(2)可理解性差,無法給出像決策樹那樣的規則。
(3)是慵懶散學習方法,基本上不學習,導致預測時速度比起邏輯迴歸之類的算法慢。
(4)樣本不平衡的時候,對稀有類別的預測準確率低。當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。
(5)對訓練數據依賴度特別大,對訓練數據的容錯性太差。如果訓練數據集中,有一兩個數據是錯誤的,剛剛好又在需要分類的數值的旁邊,這樣就會直接導致預測的數據的不準確。
邏輯迴歸
優點:
- 易於理解和實現,存儲資源低;
- 適用於連續性和類別性自變量;
缺點:
- 容易欠擬合,分類精度不高;
- 當特徵空間很大時,邏輯迴歸的性能不是很好;
- 對於非線性特徵,需要進行轉換;
- 不能很好地處理大量多類特徵或變量;
- 只能處理兩分類問題,且必須線性可分;
樸素貝葉斯 NBA
優點:
- 樸素貝葉斯模型發源於古典數學理理論,有穩定的分類效率;
- 對小規模的數據表現良好,能夠處理多分類任務,適合增量式訓練,尤其是數據量超過內存時,可以逐批地去增量訓練。
- 對缺失數據不太敏感,算法也比較簡單,常用於文本分類;
-
實時預測:速度非常快,可以實時使用;
-
可通過大型數據集進行擴展;
-
對無關特徵不敏感;
-
具有高維數據的良好性能(特徵數量很大)。
缺點:
- 理論上,樸素貝葉斯模型與其他分類方法相比,具有最小的誤差率。但是,實際上並非總是如此,因爲,樸素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好;而在屬性相關性較小時,樸素貝葉斯性能最爲良好。對於這一點,有關樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
- 需要知道先驗概率,且先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候,會由於假設的先驗模型的原因導致預測效果不佳。
- 由於我們是通過先驗和數據來決定後驗的概率,從而決定分類,所以,分類決策存在一定的錯誤率。
- 對輸入數據的表達形式很敏感。
樸素貝葉斯的應用範圍:
可用於文本分類(可以預測多個類別,並且不介意處理不相關的特徵)、垃圾郵件過濾(識別垃圾郵件)、情感分析(在社交媒體分析中識別正面和負面情緒),推薦系統(用戶下一步將購買什麼)。
支持向量機 SVM
優點:
- 在高維中表現良好。在現實世界中有無限維度(不僅僅是2D和3D)。例如,圖像數據、基因數據、醫學數據等具有更高的維數,支持向量機在這方面是有用的。基本上,當特徵/列的數量較多時,SVM表現良好。
- 類可分離時的最佳算法(當兩個類的實例可以通過直線或非線性輕鬆分隔時)。
-
離羣值的影響較小;
-
SVM適用於極端情況下的二元分類。
缺點:
- 慢:對於較大的機器學習數據集,需要大量時間來處理;
- 重疊類的性能不佳:重疊類的情況下效果不佳;
- 選擇適當的超參數很重要:這將允許足夠的泛化性能;
- 選擇適當的核函數可能比較麻煩。
SVM的應用範圍:
Bag of words應用程序(許多特徵和列),語音識別數據,圖像分類(非線性數據),醫學分析(非線性數據),文本分類(許多特徵)。
決策樹
優點:
- 易於理解和解釋,可以可視化分析,容易提取出規則;
- 可以同時處理標稱型和數值型數據;
- 比較適合處理有缺失屬性的樣本;
- 能夠處理不相關的特徵;
- 測試數據集時,運行速度比較快;
- 在相對短的時間內能夠對大型數據源做出可行且效果良好的結果。
缺點:
- 決策樹容易發生過擬合,但是隨機森林可以很大程度上減少過擬合;
- 決策樹容易忽略數據集中屬性的相互關聯;
- 對於那些各類別樣本數量不一致的數據,在決策樹中,進行屬性劃分時,不同的判定準則會帶來不同的屬性選擇傾向;信息增益準則對可取數目較多的屬性有所偏好,而增益率準則CART則對可取數目較少的屬性有所偏好,但CART進行屬性劃分時候不再簡單地直接利用增益率盡心劃分,而是採用一種啓發式規則。
隨機森林
優點:
- 對於大部分的數據,它的分類效果比較好;
- 能處理高維特徵,不容易產生過擬合,模型訓練速度比較快,特別是對於大數據而言;
- 在決定類別時,它可以評估變數的重要性;
- 對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規範化。
缺點:
- 對少量數據集和低維數據集的分類不一定可以得到很好的效果;
- 計算速度比單個的決策樹慢;
- 當我們需要推斷超出範圍的獨立變量或非獨立變量,隨機森林做得並不好。
無監督學習 Unsupervised Learning
K-Means
優點:
- 原理易懂、易於實現;
- 當簇間的區別較明顯時,聚類效果較好;
缺點:
- 當樣本集規模大時,收斂速度會變慢;
- 對孤立點數據敏感,少量噪聲就會對平均值造成較大影響;
- k的取值十分關鍵,對不同數據集,k選擇沒有參考性,需要大量實驗;
DBSCAN
優點:
- 聚類速度快且能夠有效處理噪聲點和發現任意形狀的空間聚類;
- 與K-MEANS比較起來,不需要輸入要劃分的聚類個數;
- 聚類簇的形狀沒有偏倚;
- 可以在需要時輸入過濾噪聲的參數。
缺點:
- 當數據量增大時,要求較大的內存支持I/O消耗也很大;
- 當空間聚類的密度不均勻、聚類間距差相差很大時,聚類質量較差,因爲這種情況下參數MinPts和Eps選取困難;
- 算法聚類效果依賴與距離公式選取,實際應用中常用歐式距離,對於高維數據,存在“維數災難”。
FP Growth
經典的關聯規則挖掘算法包括Apriori算法和FP-growth算法。
Apriori算法多次掃描交易數據庫,每次利用候選頻繁zd集產生頻繁集;而FP-growth則利用樹形結構,無需產生候選頻繁集而是直接得到頻繁集,大大減少掃描交易數據庫的次數,從而提高了算法的效率。但是Apriori的算法擴展性較好,專可以用於並行計算等領域。
Apriori Algorithm是關聯規則裏一項基本算法。是由Rakesh Agrawal和Ramakrishnan Srikant兩位博士在1994年提出的關聯規則挖掘算法。關聯規則的目的就是在一個數據集中找出項與項之間的關係,也屬被稱爲購物藍分析 (Market Basket analysis),因爲“購物藍分析”很貼切的表達了適用該算法情景中的一個子集。
Apriori
Apriori算法是一種挖掘關聯規則的算法,用於挖掘其內含的、未知的卻又實際存在的數據關係,其核心是基於兩階段頻集思想的遞推算法 。
Apriori算法分爲兩個階段:
1)尋找頻繁項集
2)由頻繁項集找關聯規則
缺點:
- 在每一步產生侯選項目集時循環產生的組合過多,沒有排除不應該參與組合的元素;
- 每次計算項集的支持度時,都對數據庫中 的全部記錄進行了一遍掃描比較,需要很大的I/O負載。
PCA
優點:
- 使得數據集更易使用;
- 降低算法的計算開銷;
- 去除噪聲;
- 使得結果容易理解;
- 完全無參數限制。
缺點:
- 如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高;
- 特徵值分解有一些侷限性,比如變換的矩陣必須是方陣;
- 在非高斯分佈情況下,PCA方法得出的主元可能並不是最優的。
PCA算法應用:
- 高維數據集的探索與可視化;
- 數據壓縮;
- 數據預處理;
- 圖象、語音、通信的分析處理;
- 降維(最主要),去除數據冗餘與噪聲。
集成學習 Ensemble Learning
XGBoost
優點:
- 所需的特徵工程較少(不需要數據縮放,數據歸一化,也可以很好地處理缺失值);
- 可以發現特徵的重要性(它輸出每個特徵的重要性,可用於特徵選擇);
- 離羣值具有最小的影響;
- 可以很好地處理大型數據集;
- 良好的執行速度;
- 出色的模型表現(在大多數Kaggle比賽中獲勝);
- 不太容易過擬合。
缺點:
- 解釋困難,可視化困難;
- 如果參數未正確調整,則可能過度擬合;
- 由於存在太多超參數,因此難以調整。
XGBoost的應用領域:
可用於任何分類問題。如果特徵太多、數據集太大、存在離羣值和缺失值,並且不想進行太多特徵工程,則XGBoost特別有用。它幾乎贏得了所有比賽的勝利,因此這是解決任何分類問題時必須牢記的一種算法。
AdaBoosting
Adaboost是一種加和模型,每個模型都是基於上一次模型的錯誤率來建立的,過分關注分錯的樣本,而對正確分類的樣本減少關注度,逐次迭代之後,可以得到一個相對較好的模型。該算法是一種典型的boosting算法,其加和理論的優勢可以使用Hoeffding不等式得以解釋。
優點就是具有很高精度的特性。這種算法可以使用各種方法構建子分類器,Adaboost算法提供的是框架。同時,當使用簡單分類器時,計算出的結果是可以理解的,並且弱分類器的構造極其簡單。而簡單也是其中一個特點,不用做特徵篩選。最後就是不易發生overfitting。而缺點只有一個,那就是對outlier比較敏感。
分類 | 小分類 | 算法 | 計算複雜性 | 解釋性 | 缺失值影響 |
監督學習 Supervised Learning |
迴歸 Regression |
線性迴歸 Linear Regression |
低 | 容易 | 敏感 |
彈性網絡迴歸 ElasticNet Regression |
|||||
多項式迴歸 Ploynominal Regression |
|||||
嶺迴歸 Ridge Regression | |||||
Lasso迴歸 | |||||
分類 Classification |
K鄰近算法(KNN) | 高 | 一般 | 一般 | |
邏輯迴歸 Logistic Regression |
低 | 容易 | 敏感 | ||
樸素貝葉斯 NBA Naive Bayesian Algorithm |
中 | 容易 | 較不敏感 | ||
支持向量機 SVM | 中 | 容易 | 敏感 | ||
決策樹 Decision Tree |
低 | 容易 | 不敏感 | ||
隨機森林 Random Forest |
低 | 容易 | 不敏感 | ||
無監督學習 Unsupervised Learning |
聚類 Clustering |
Fuzzy C-Means | |||
Means Shift | |||||
K-Means | 低 | 容易 | 一般 | ||
DBSCAN | |||||
層次聚類 Agglomerative | |||||
關聯規則學習 Association Rule Learning |
FP Growth | ||||
Apriori | |||||
Euclat | |||||
降維 Dimensionality Reduction Algorithm |
LDA | ||||
SVD | |||||
LSA | |||||
PCA | |||||
t-SNE | |||||
集成學習 Ensemble Learning |
Boosting | XGBoost | |||
LightGBM | |||||
CatBoost | |||||
AdaBoosting | 低 | 容易 | 不敏感 | ||
神經網絡和 深度學習 Neural Network and Deep Learning |
CNN | 高 | 困難 | 不敏感 | |
RNN | |||||
強化學習 Reinforcement Learning |
Q-Learning | ||||
DQN | |||||
SARSA | |||||
A3C | |||||
Genetic Algorithm |