監督學習,無監督學習常用演算法集合總結,引用scikit-learn庫(監督篇)

Novice!!!發表於2022-03-19

why寫這篇blog

最近在接觸這方面的知識,但是找了許多的筆記,都感覺沒有很好的總結出來,也正好當做是邊學習,邊複習著走。大佬輕噴。參考書目《python機器學習基礎教程》

將分別從以下5方面進行總結

1.演算法的作用
2.引用的方式(我這裡主要是基於scikit-learn
3.重要引數
4.優缺點
5.注意事項

監督學習演算法

監督學習主要解決兩種問題:迴歸分類

統一a為迴歸,b為分類

(既然是總結,那概念就不過多贅述) 有需要了解的概念,可以上這個網站AI知識庫
直接上演算法

  1. K近鄰 k-NN
    理解:近朱者赤,近墨者黑
    作用:迴歸和分類
    引用方式:a:from sklearn.neighbors import KNeighborsRegressor|b: from sklearn.neighbors import KNeighborsClassifier
    重要引數:n_neighbors=NN為近鄰的鄰居數量。資料點之間的距離預設使用歐式距離。
    優缺點:模型很容易理解,通常不需要過多調節就可以得到不錯的效能。使用 k-NN 演算法時,對資料進行預處理是很重要的。預測速度慢且不能處理具有很多特徵的資料集。
    注意事項:多鄰居的情況採用(voting)投票決定歸屬,k-NN在實踐中往往不會用到。

  2. 線性迴歸 普通最小二乘法
    理解:確定函式,給自變數,因變數為預測值。
    作用:迴歸
    引用方式:a:from sklearn.linear_model import LinearRegression
    重要引數:w , b
    優缺點:無法控制複雜度,欠擬合的概率較大。
    注意事項:“斜率”引數(w,也叫作權重或係數)被儲存在 coef_ 屬性中,而偏移或截距(b)被儲存在 intercept_ 屬性中。

  3. 嶺迴歸 使用了L2正則化的線性迴歸
    (正則化的個人拙見:加大或縮小某些特徵的權值,改變其對預測結果的影響)
    L2正則化:w 的所有元素都應接近於 0
    理解:確定函式,給自變數,因變數為預測值。
    作用:迴歸
    重要引數:w(希望w儘量小) , b , alpha(預設=1,增大alpha,w越趨近0)
    引用方法:a :from sklearn.linear_model import Ridge
    優缺點:提高泛化能力,對小資料集的測試分數較高。如果有足夠多的訓練資料,正則化變得不那麼重要,並且嶺迴歸和線性迴歸將具有相同的效能。
    注意事項:增大或減小alpha均有可能提高泛化效能,alpha 的最佳設定值取決於用到的具體資料集

  4. lasso 使用了L1正則化的線性迴歸
    L1正則化:某些特徵被模型完全忽略,w = 0。
    理解:確定函式,給自變數,因變數為預測值。
    作用:迴歸
    重要引數:w , b ,alpha , max_iter(執行迭代的最大次數,減小alpha時增大max_iter)
    引用方法:a :from sklearn.linear_model import Lasso
    優缺點:給出更容易理解的模型,因為它只選擇了一部分輸入特徵。
    注意事項:把 alpha 設得太小,那麼就會消除正則化的效果,並出現過擬合。

  5. Logistic 迴歸 其本質是分類演算法!!!
    (預設使用L2正則化)
    理解:確定函式,給自變數,y值與因變數比較大小。用於分類的線性模型
    作用:分類
    重要引數:C(預設=1)較小的 C 值可以讓演算法儘量適應“大多數”資料點,而較大的 C 值更強調每個資料點都分類正確的重要性。
    引用方法:b from sklearn.linear_model import LogisticRegression
    優缺點:
    注意事項:理解成用於分類的線性模型。若想獲得可解釋性更強的模型可以更改為L1正則化LogisticRegression(C=1, penalty="l1")

  6. 線性支援向量機 線性SVM
    (預設使用L2正則化)
    理解:確定函式,給自變數,y值與因變數比較大小。用於分類的線性模型
    作用:分類
    重要引數:C(預設=1)較小的 C 值可以讓演算法儘量適應“大多數”資料點,而較大的 C 值更強調每個資料點都分類正確的重要性。
    引用方法:b from sklearn.svm import LinearSVC
    優缺點:適用於二分類問題(可以通過“一對其餘”分類器進行多分類)。
    注意事項:理解成用於分類的線性模型。與LogisticRegression作用極為相似。

小結

2--6均為線性模型,線性模型的主要引數是正則化引數,在迴歸模型中叫作 alpha,在 LinearSVC 和 Logistic-Regression 中叫作 C。如果特徵數量大於樣本數量,線性模型的表現通常都很好。

  1. 樸素貝葉斯分類器
    這篇文章寫的很好零基礎學習樸素貝葉斯
    優缺點:訓練速度往往更快,泛化能力要比線性分類器稍差。

  2. 決策樹
    理解:從一層層的 if/else 問題中進行學習,並得出結論。
    作用:迴歸和分類
    重要引數:max_depth(樹深),max_leaf_nodes(葉結點數目),min_samples_
    leaf(結點中資料點的最小數目)均用於預剪枝
    引用方法: a: from sklearn.tree import DecisionTreeRegressor|b:from sklearn.tree import DecisionTreeClassifier
    優缺點:模型很容易視覺化,很容易理解,不受資料縮放的影響,即使做了預剪枝,它也經常會過擬合,泛化效能很差。
    注意事項:決策樹的迴歸不能進行外推,也就是說不能進行迴歸預測。可以利用 graphviz 模組讀取檔案,將樹視覺化。

  3. 隨機森林
    理解:本質上是許多決策樹的集合。(決策樹的數量和每棵樹所取的特徵)
    作用:迴歸和分類
    重要引數:n_estimators(構造的決策樹的數量),max_features(每棵樹所取的特徵)
    引用方法:a:from sklearn.ensemble import RandomForestRegressor |b:from sklearn.ensemble import RandomForestClassifier
    優缺點:通常不需要反覆調節引數就可以給出很好的結果
    注意事項:固定 random_state 是很重要的,經驗法則就是“在你的時間 / 記憶體允許的情況下儘量多”,max_features好的經驗就是使用預設值。

  4. 梯度提升迴歸樹 梯度提升機
    理解:合併多個決策樹來構建一個更為強大的模型,採用連續的方式構造樹,每棵樹都試圖糾正前一棵樹的錯誤。
    作用:迴歸和分類
    重要引數:learning_rate(學習率),n_estimators(樹的數量)
    引用方法:a:from sklearn.ensemble import GradientBoostingRegressor |b: from sklearn.ensemble import GradientBoostingClassifier
    優缺點:需要仔細調參,通常不適用於高維稀疏資料
    注意事項:梯度提升模型的 max_depth 通常都設定得很小,一般不超過 5,梯度提升迴歸樹中沒有隨機化,而是用到了強預剪枝。

小結

9,10均是決策樹的整合
整合:是合併多個機器學習模型來構建更強大模型的方法。由於梯度提升和隨機森林兩種方法在類似的資料上表現得都很好,常用的方法就是先嚐試隨機森林,它的魯棒性很好。如果隨機森林效果很好,但預測時間太長,或者機器學習模型精度小數點後第二位的提高也很重要,那麼切換成梯度提升通常會有用。

  1. 核支援向量機 SVM
    詳細內容和理解SVM
    理解:將線性支援向量機推廣到更復雜模型。(背後的數學過於複雜)
    作用:分類
    重要引數:gamma(控制高斯核的寬度),C(正則化引數) 。預設情況下,C=1,gamma=1/n_features
    引用方法:b: from sklearn.svm import SVC
    優缺點:預處理資料和調參都需要非常小心,很難檢查

  2. 多層感知機 前反饋神經網路MLP
    理解:廣義的線性模型。
    作用:迴歸和分類
    重要引數:solver(預設=adam,還有lbfgs,sgd),層數,每層的隱單元個數
    引用方法:a: from sklearn.neural_network import MLPRegressor |b:from sklearn.neural_network import MLPClassifier
    優缺點:能夠獲取大量資料中包含的資訊,並構建無比複雜的模型,需要很長的訓練時間。它還需要仔細地預處理資料。
    注意事項:所有流行的深度學習庫也都允許使用高效能的圖形處理單元(GPU),而 scikit-learn 不支援 GPU。使用 GPU 可以將計算速度加快 10 到 100倍,GPU 對於將深度學習方法應用到大型資料集上至關重要。

有很多細節的地方是沒有講清楚的,只是一個彙總方便檢視。

相關文章