sklearn淺析(一)——sklearn的組織結構
阿新 • • 發佈:2019-02-06
sklearn是基於numpy和scipy的一個機器學習演算法庫,設計的非常優雅,它讓我們能夠使用同樣的介面來實現所有不同的演算法呼叫。本文首先介紹下sklearn內的模組組織和演算法類的頂層設計圖。
三大模組
監督學習(supervised learning)
1.
- neighbors:近鄰演算法
- svm:支援向量機
- kernel-ridge:核——嶺迴歸
- discriminant_analysis:判別分析
- linear_model:廣義線性模型
2.
- ensemle:整合方法
- tree:決策樹
- naive_bayes:樸素貝葉斯
- cross_decomposition:交叉分解
- gaussian_process:高斯過程
3.
- neural_network:神經網路
- calibration:概率校準
- isotonic:保序迴歸
- feature_selection:特徵選擇
- multiclass:多類多標籤演算法
以上的每個模組都包括多個演算法,在呼叫時直接import即可,譬如:
from sklearn.svm import SVC
svc = SVC()
無監督學習(unsupervised learning)
1.
- decomposition:矩陣因子分解
- cluster:聚類
- manifold:流形學習
- mixture:高斯混合模型
2.
- neural_network:無監督神經網路
- density:密度估計
- covariance:協方差估計
使用方式同上。
資料變換
1.
- feature_extraction:特徵抽取
- feature_selection:特徵選擇
- preprocess:預處理
2.
- random_projection:隨機投影
- kernel_approximation:核逼近
- pipline:管道流(這個嚴格說不算是資料變換模組)
演算法類的頂層設計圖
- baseEstimator:所有評估器的父類
- ClassifierMixin:所有分類器的父類,其子類必須實現一個score函式
- RegressorMixin:所有迴歸器的父類,其子類必須實現一個score函式
- ClusterMixin:所有聚類的父類,其子類必須實現一個fit_predict函式
- BiClusterMixin:
- TransformerMixin:所有資料變換的父類,其子類必須實現一個fit_transform函式
- DensityMixin:所有密度估計相關的父類,其子類必須實現一個score函式
- MetaEsimatorMixin:可能是出於相容性考慮,看名字就能知道,目前裡面沒有內容
我們以svm和cluster為例,介紹其繼承關係圖:
svm
這裡SVC即support vector classifier,SVR即support vector regression,svm既可以作為分類器,也可以作為迴歸器,所以,它們分別繼承實現了ClassifierMixin和RegressorMixin。
cluster
這裡以MeanShift和KMeans為例,可以看到KMeans實現了TransformerMixin類,因此它有一個transform方法。
統一的API介面
在sklearn裡面,我們可以使用完全一樣的介面來實現不同的機器學習演算法,通俗的流程可以理解如下:
- 資料載入和預處理
- 定義分類器(迴歸器等等),譬如svc = svm.svc()
- 用訓練集對模型進行訓練,只需呼叫fit方法,svc.fit(X_train, y_train)
- 用訓練好的模型進行預測:y_pred=svc.predict(X_test)
- 對模型進行效能評估:svc.score(X_test, y_test)
模型評估中,可以通過傳入一個score引數來自定義評估標準,該函式的返回值越大代表模型越好。sklearn有一些預定義的score方法,這些方法名在sklearn.metrics.SCORERS中定義,呼叫時只需傳入相應的字串即可,可以通過如下方式獲取到所有預定義的方法名:
from sklearn.metrics import SCORERS
for i in SCORERS.keys():
print(i)
從下一節開始,我們將進行sklearn機器學習演算法的原始碼解讀。
題外話:上面的ABCMeta是python中實現抽象類和介面機制的一個模組,ABC是Abstract Base Class的簡寫,由於python自身不提供抽象類和介面機制,因此需要藉助它來實現。詳情請自行百度。