why寫這篇blog
最近在接觸這方面的知識,但是找了許多的筆記,都感覺沒有很好的總結出來,也正好當做是邊學習,邊複習著走。大佬輕噴。參考書目《python機器學習基礎教程》
將分別從以下5方面進行總結
1.演算法的作用
2.引用的方式(我這裡主要是基於scikit-learn)
3.重要引數
4.優缺點
5.注意事項
監督學習演算法
監督學習主要解決兩種問題:迴歸與分類。
統一a為迴歸,b為分類。
(既然是總結,那概念就不過多贅述) 有需要了解的概念,可以上這個網站AI知識庫
直接上演算法
-
K近鄰 k-NN
理解:近朱者赤,近墨者黑
作用:迴歸和分類
引用方式:a:from sklearn.neighbors import KNeighborsRegressor
|b:from sklearn.neighbors import KNeighborsClassifier
重要引數:n_neighbors=N
N為近鄰的鄰居數量。資料點之間的距離預設使用歐式距離。
優缺點:模型很容易理解,通常不需要過多調節就可以得到不錯的效能。使用 k-NN 演算法時,對資料進行預處理是很重要的。預測速度慢且不能處理具有很多特徵的資料集。
注意事項:多鄰居的情況採用(voting)投票決定歸屬,k-NN在實踐中往往不會用到。 -
線性迴歸 普通最小二乘法
理解:確定函式,給自變數,因變數為預測值。
作用:迴歸
引用方式:a:from sklearn.linear_model import LinearRegression
重要引數:w , b
優缺點:無法控制複雜度,欠擬合的概率較大。
注意事項:“斜率”引數(w,也叫作權重或係數)被儲存在 coef_ 屬性中,而偏移或截距(b)被儲存在 intercept_ 屬性中。 -
嶺迴歸 使用了L2正則化的線性迴歸
(正則化的個人拙見:加大或縮小某些特徵的權值,改變其對預測結果的影響)
L2正則化:w 的所有元素都應接近於 0
理解:確定函式,給自變數,因變數為預測值。
作用:迴歸
重要引數:w(希望w儘量小) , b , alpha(預設=1,增大alpha,w越趨近0)
引用方法:a :from sklearn.linear_model import Ridge
優缺點:提高泛化能力,對小資料集的測試分數較高。如果有足夠多的訓練資料,正則化變得不那麼重要,並且嶺迴歸和線性迴歸將具有相同的效能。
注意事項:增大或減小alpha均有可能提高泛化效能,alpha 的最佳設定值取決於用到的具體資料集 -
lasso 使用了L1正則化的線性迴歸
L1正則化:某些特徵被模型完全忽略,w = 0。
理解:確定函式,給自變數,因變數為預測值。
作用:迴歸
重要引數:w , b ,alpha , max_iter(執行迭代的最大次數,減小alpha時增大max_iter)
引用方法:a :from sklearn.linear_model import Lasso
優缺點:給出更容易理解的模型,因為它只選擇了一部分輸入特徵。
注意事項:把 alpha 設得太小,那麼就會消除正則化的效果,並出現過擬合。 -
Logistic 迴歸 其本質是分類演算法!!!
(預設使用L2正則化)
理解:確定函式,給自變數,y值與因變數比較大小。用於分類的線性模型
作用:分類
重要引數:C(預設=1)較小的 C 值可以讓演算法儘量適應“大多數”資料點,而較大的 C 值更強調每個資料點都分類正確的重要性。
引用方法:bfrom sklearn.linear_model import LogisticRegression
優缺點:
注意事項:理解成用於分類的線性模型。若想獲得可解釋性更強的模型可以更改為L1正則化LogisticRegression(C=1, penalty="l1")
-
線性支援向量機 線性SVM
(預設使用L2正則化)
理解:確定函式,給自變數,y值與因變數比較大小。用於分類的線性模型
作用:分類
重要引數:C(預設=1)較小的 C 值可以讓演算法儘量適應“大多數”資料點,而較大的 C 值更強調每個資料點都分類正確的重要性。
引用方法:bfrom sklearn.svm import LinearSVC
優缺點:適用於二分類問題(可以通過“一對其餘”分類器進行多分類)。
注意事項:理解成用於分類的線性模型。與LogisticRegression作用極為相似。
小結
2--6均為線性模型,線性模型的主要引數是正則化引數,在迴歸模型中叫作 alpha,在 LinearSVC 和 Logistic-Regression 中叫作 C。如果特徵數量大於樣本數量,線性模型的表現通常都很好。
-
樸素貝葉斯分類器
這篇文章寫的很好零基礎學習樸素貝葉斯
優缺點:訓練速度往往更快,泛化能力要比線性分類器稍差。 -
決策樹
理解:從一層層的 if/else 問題中進行學習,並得出結論。
作用:迴歸和分類
重要引數:max_depth(樹深),max_leaf_nodes(葉結點數目),min_samples_
leaf(結點中資料點的最小數目)均用於預剪枝。
引用方法: a:from sklearn.tree import DecisionTreeRegressor
|b:from sklearn.tree import DecisionTreeClassifier
優缺點:模型很容易視覺化,很容易理解,不受資料縮放的影響,即使做了預剪枝,它也經常會過擬合,泛化效能很差。
注意事項:決策樹的迴歸不能進行外推,也就是說不能進行迴歸預測。可以利用 graphviz 模組讀取檔案,將樹視覺化。 -
隨機森林
理解:本質上是許多決策樹的集合。(決策樹的數量和每棵樹所取的特徵)
作用:迴歸和分類
重要引數:n_estimators(構造的決策樹的數量),max_features(每棵樹所取的特徵)
引用方法:a:from sklearn.ensemble import RandomForestRegressor
|b:from sklearn.ensemble import RandomForestClassifier
優缺點:通常不需要反覆調節引數就可以給出很好的結果
注意事項:固定 random_state 是很重要的,經驗法則就是“在你的時間 / 記憶體允許的情況下儘量多”,max_features好的經驗就是使用預設值。 -
梯度提升迴歸樹 梯度提升機
理解:合併多個決策樹來構建一個更為強大的模型,採用連續的方式構造樹,每棵樹都試圖糾正前一棵樹的錯誤。
作用:迴歸和分類
重要引數:learning_rate(學習率),n_estimators(樹的數量)
引用方法:a:from sklearn.ensemble import GradientBoostingRegressor
|b:from sklearn.ensemble import GradientBoostingClassifier
優缺點:需要仔細調參,通常不適用於高維稀疏資料
注意事項:梯度提升模型的 max_depth 通常都設定得很小,一般不超過 5,梯度提升迴歸樹中沒有隨機化,而是用到了強預剪枝。
小結
9,10均是決策樹的整合
整合:是合併多個機器學習模型來構建更強大模型的方法。由於梯度提升和隨機森林兩種方法在類似的資料上表現得都很好,常用的方法就是先嚐試隨機森林,它的魯棒性很好。如果隨機森林效果很好,但預測時間太長,或者機器學習模型精度小數點後第二位的提高也很重要,那麼切換成梯度提升通常會有用。
-
核支援向量機 SVM
詳細內容和理解SVM
理解:將線性支援向量機推廣到更復雜模型。(背後的數學過於複雜)
作用:分類
重要引數:gamma(控制高斯核的寬度),C(正則化引數) 。預設情況下,C=1,gamma=1/n_features
引用方法:b:from sklearn.svm import SVC
優缺點:預處理資料和調參都需要非常小心,很難檢查 -
多層感知機 前反饋神經網路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 對於將深度學習方法應用到大型資料集上至關重要。