scikit-learn學習總結
阿新 • • 發佈:2018-12-01
sklearn的官網連結:http://scikit-learn.org/stable/index.html#
目錄
1. 分類、迴歸
2. 降維
3. 模型評估與選擇
4. 資料預處理
大類 | 小類 | 適用問題 | 實現 | 說明 |
---|---|---|---|---|
分類、迴歸 | ||||
1.1 廣義線性模型 | 1.1.1 普通最小二乘法 | 迴歸 | sklearn.linear_model.LinearRegression |
|
注:本節中所有的迴歸模型皆為線性迴歸模型 | 1.1.2 Ridge/嶺迴歸 | 迴歸 | sklearn.linear_model.Ridge | 解決兩類迴歸問題: 一是樣本少於變數個數 二是變數間存在共線性 |
1.1.3 Lasso | 迴歸 | sklearn.linear_model.Lasso | 適合特徵較少的資料 | |
1.1.4 Multi-task Lasso | 迴歸 | sklearn.linear_model.MultiTaskLasso |
y值不是一元的迴歸問題 | |
1.1.5 Elastic Net | 迴歸 | sklearn.linear_model.ElasticNet | 結合了Ridge和Lasso | |
1.1.6 Multi-task Elastic Net | 迴歸 | sklearn.linear_model.MultiTaskElasticNet | y值不是一元的迴歸問題 | |
1.1.7 Least Angle Regression(LARS) | 迴歸 | sklearn.linear_model.Lars | 適合高維資料 | |
1.1.8 LARS Lasso | 迴歸 | sklearn.linear_model.LassoLars | (1)適合高維資料使用 (2)LARS演算法實現的lasso模型 |
|
1.1.9 Orthogonal Matching Pursuit (OMP) | 迴歸 | sklearn.linear_model.OrthogonalMatchingPursuit | 基於貪心演算法實現 | |
1.1.10 貝葉斯迴歸 | 迴歸 | sklearn.linear_model.BayesianRidge sklearn.linear_model.ARDRegression |
優點: (1)適用於手邊資料(2)可用於在估計過程中包含正規化引數 缺點:耗時 |
|
1.1.11 Logistic regression | 分類 | sklearn.linear_model.LogisticRegression | ||
1.1.12 SGD(隨機梯度下降法) | 分類 /迴歸 |
sklearn.linear_model.SGDClassifier sklearn.linear_model.SGDRegressor |
適用於大規模資料 | |
1.1.13 Perceptron | 分類 | sklearn.linear_model.Perceptron | 適用於大規模資料 | |
1.1.14 Passive Aggressive Algorithms | 分類 /迴歸 |
sklearn.linear_model. PassiveAggressiveClassifier sklearn.linear_model. PassiveAggressiveRegressor |
適用於大規模資料 | |
1.1.15 Huber Regression | 迴歸 | sklearn.linear_model.HuberRegressor | 能夠處理資料中有異常值的情況 | |
1.1.16 多項式迴歸 | 迴歸 | sklearn.preprocessing.PolynomialFeatures | 通過PolynomialFeatures將非線性特徵轉化成多項式形式,再用線性模型進行處理 | |
1.2 線性和二次判別分析 | 1.2.1 LDA | 分類/降維 | sklearn.discriminant_analysis. LinearDiscriminantAnalysis |
|
1.2.2 QDA | 分類 | sklearn.discriminant_analysis. QuadraticDiscriminantAnalysis |
||
1.3 核嶺迴歸 | 簡稱KRR | 迴歸 | sklearn.kernel_ridge.KernelRidge | 將核技巧應用到嶺迴歸(1.1.2)中,以實現非線性迴歸 |
1.4 支援向量機 | 1.4.1 SVC,NuSVC,LinearSVC | 分類 | sklearn.svm.SVC sklearn.svm.NuSVC sklearn.svm.LinearSVC |
SVC可用於非線性分類,可指定核函式; NuSVC與SVC唯一的不同是可控制支援向量的個數; LinearSVC用於線性分類 |
1.4.2 SVR,NuSVR,LinearSVR | 迴歸 | sklearn.svm.SVR sklearn.svm.NuSVR sklearn.svm.LinearSVR |
同上,將”分類”變成”迴歸”即可 | |
1.4.3 OneClassSVM | 異常檢測 | sklearn.svm.OneClassSVM | 無監督實現異常值檢測 | |
1.5 隨機梯度下降 | 同1.1.12 | |||
1.6 最近鄰 | 1.6.1 Unsupervised Nearest Neighbors | – | sklearn.neighbors.NearestNeighbors | 無監督實現K近鄰的尋找 |
1.6.2 Nearest Neighbors Classification | 分類 | sklearn.neighbors.KNeighborsClassifier sklearn.neighbors.RadiusNeighborsClassifier |
(1)不太適用於高維資料 (2)兩種實現只是距離度量不一樣,後者更適合非均勻的取樣 |
|
1.6.3 Nearest Neighbors Regression | 迴歸 | sklearn.neighbors.KNeighborsRegressor sklearn.neighbors.RadiusNeighborsRegressor |
同上 | |
1.6.5 Nearest Centroid Classifier | 分類 | sklearn.neighbors.NearestCentroid | 每個類對應一個質心,測試樣本被分類到距離最近的質心所在的類別 | |
1.7 高斯過程(GP/GPML) | 1.7.1 GPR | 迴歸 | sklearn.gaussian_process. GaussianProcessRegressor |
與KRR一樣使用了核技巧 |
1.7.3 GPC | 分類 | sklearn.gaussian_process. GaussianProcessClassifier |
||
1.8 交叉分解 | 實現演算法:CCA和PLS | – | – | 用來計算兩個多元資料集的線性關係,當預測資料比觀測資料有更多的變數時,用PLS更好 |
1.9 樸素貝葉斯 | 1.9.1 高斯樸素貝葉斯 | 分類 | sklearn.naive_bayes.GaussianNB | 處理特徵是連續型變數的情況 |
1.9.2 多項式樸素貝葉斯 | 分類 | sklearn.naive_bayes.MultinomialNB | 最常見,要求特徵是離散資料 | |
1.9.3 伯努利樸素貝葉斯 | 分類 | sklearn.naive_bayes.BernoulliNB | 要求特徵是離散的,且為布林型別,即true和false,或者1和0 | |
1.10 決策樹 | 1.10.1 Classification | 分類 | sklearn.tree.DecisionTreeClassifier | |
1.10.2 Regression | 迴歸 | sklearn.tree.DecisionTreeRegressor | ||
1.11 整合方法 | 1.11.1 Bagging | 分類/迴歸 | sklearn.ensemble.BaggingClassifier sklearn.ensemble.BaggingRegressor |
可以指定基學習器,預設為決策樹 |
注:1和2屬於整合方法中的並行化方法,3和4屬於序列化方法 | 1.11.2 Forests of randomized trees | 分類/迴歸 | RandomForest(RF,隨機森林): sklearn.ensemble.RandomForestClassifier sklearn.ensemble.RandomForestRegressor ExtraTrees(RF改進): sklearn.ensemble.ExtraTreesClassifier sklearn.ensemble.ExtraTreesRegressor |
基學習器為決策樹 |
1.11.3 AdaBoost | 分類/迴歸 | sklearn.ensemble.AdaBoostClassifier sklearn.ensemble.AdaBoostRegressor |
可以指定基學習器,預設為決策樹 | |
號外:最近特別火的兩個梯度提升演算法,LightGBM和XGBoost (XGBoost提供了sklearn介面) |
1.11.4 Gradient Tree Boosting | 分類/迴歸 | GBDT: sklearn.ensemble.GradientBoostingClassifier GBRT: sklearn.ensemble.GradientBoostingRegressor |
基學習器為決策樹 |
1.11.5 Voting Classifier | 分類 | sklearn.ensemble.VotingClassifier | 須指定基學習器 | |
1.12 多類與多標籤演算法 | – | – | – | sklearn中的分類演算法都預設支援多類分類,其中LinearSVC、 LogisticRegression和GaussianProcessClassifier在進行多類分類時需指定引數multi_class |
1.13 特徵選擇 | 1.13.1 過濾法之方差選擇法 | 特徵選擇 | sklearn.feature_selection.VarianceThreshold | 特徵選擇方法分為3種:過濾法、包裹法和嵌入法。過濾法不用考慮後續學習器 |
1.13.2 過濾法之卡方檢驗 | 特徵選擇 | sklearn.feature_selection.SelectKBest | ||
1.13.3 包裹法之遞迴特徵消除法 | 特徵選擇 | sklearn.feature_selection.RFE | 包裹法需考慮後續學習器,引數中需輸入基學習器 | |
1.13.4 嵌入法 | 特徵選擇 | sklearn.feature_selection.SelectFromModel | 嵌入法是過濾法和嵌入法的結合,引數中也需輸入基學習器 | |
1.14 半監督 | 1.14.1 Label Propagation | 分類/迴歸 | sklearn.semi_supervised.LabelPropagation sklearn.semi_supervised.LabelSpreading |
|
1.15 保序迴歸 | – | 迴歸 | sklearn.isotonic.IsotonicRegression | |
1.16 概率校準 | – | – | – | 在執行分類時,獲得預測的標籤的概率 |
1.17 神經網路模型 | (待寫) | |||
降維 | ||||
2.5 降維 | 2.5.1 主成分分析 | 降維 | PCA: sklearn.decomposition.PCA IPCA: sklearn.decomposition.IncrementalPCA KPCA: sklearn.decomposition.KernelPCA SPCA: sklearn.decomposition.SparsePCA |
(1)IPCA比PCA有更好的記憶體效率,適合超大規模降維。 (2)KPCA可以進行非線性降維 (3)SPCA是PCA的變體,降維後返回最佳的稀疏矩陣 |
2.5.2 截斷奇異值分解 | 降維 | sklearn.decomposition.TruncatedSVD | 可以直接對scipy.sparse矩陣處理 | |
2.5.3 字典學習 | – | sklearn.decomposition.SparseCoder sklearn.decomposition.DictionaryLearning |
SparseCoder實現稀疏編碼,DictionaryLearning實現字典學習 | |
模型評估與選擇 | ||||
3.1 交叉驗證/CV | 3.1.1 分割訓練集和測試集 | – | sklearn.model_selection.train_test_split | |
3.1.2 通過交叉驗證評估score | – | sklearn.model_selection.cross_val_score | score對應效能度量,分類問題預設為accuracy_score,迴歸問題預設為r2_score | |
3.1.3 留一法LOO | – | sklearn.model_selection.LeaveOneOut | CV的特例 | |
3.1.4 留P法LPO | – | sklearn.model_selection.LeavePOut | CV的特例 | |
3.2 調參 | 3.2.1 網格搜尋 | – | sklearn.model_selection.GridSearchCV | 最常用的調參方法。可傳入學習器、學習器引數範圍、效能度量score(預設為accuracy_score或r2_score )等 |
3.2.2 隨機搜尋 | – | sklearn.model_selection.RandomizedSearchCV | 引數傳入同上 | |
3.3 效能度量 | 3.3.1 分類度量 | – | – | 對應交叉驗證和調參中的score |
3.3.2 迴歸度量 | – | – | ||
3.3.3 聚類度量 | – | – | ||
3.4 模型永續性 | – | – | – | 使用pickle存放模型,可以使模型不用重複訓練 |
3.5 驗證曲線 | 3.5.1 驗證曲線 | – | sklearn.model_selection.validation_curve | 橫軸為某個引數的值,縱軸為模型得分 |
3.5.2 學習曲線 | – | sklearn.model_selection.learning_curve | 橫軸為訓練資料大小,縱軸為模型得分 | |
資料預處理 | ||||
4.3 資料預處理 | 4.3.1 標準化 | 資料預處理 | 標準化: sklearn.preprocessing.scale sklearn.preprocessing.StandardScaler |
scale與StandardScaler都是將將特徵轉化成標準正態分佈(即均值為0,方差為1),且都可以處理scipy.sparse矩陣,但一般選擇後者 |
資料預處理 | 區間縮放: sklearn.preprocessing.MinMaxScaler sklearn.preprocessing.MaxAbsScale |
MinMaxScaler預設為0-1縮放,MaxAbsScaler可以處理scipy.sparse矩陣 | ||
4.3.2 非線性轉換 | 資料預處理 | sklearn.preprocessing.QuantileTransformer | 可以更少的受異常值的影響 | |
4.3.3 歸一化 | 資料預處理 | sklearn.preprocessing.Normalizer | 將行向量轉換為單位向量,目的在於樣本向量在點乘運算或其他核函式計算相似性時,擁有統一的標準 | |
4.3.4 二值化 | 資料預處理 | sklearn.preprocessing.Binarizer | 通過設定閾值對定量特徵處理,獲取布林值 | |
4.3.5 啞編碼 | 資料預處理 | sklearn.preprocessing.OneHotEncoder | 對定性特徵編碼。也可用pandas.get_dummies實現 | |
4.3.6 缺失值計算 | 資料預處理 | sklearn.preprocessing.Imputer | 可用三種方式填充缺失值,均值(預設)、中位數和眾數。也可用pandas.fillna實現 | |
4.3.7 多項式轉換 | 資料預處理 | sklearn.preprocessing.PolynomialFeatures | ||
4.3.8 自定義轉換 | 資料預處理 | sklearn.preprocessing.FunctionTransformer |