1. 程式人生 > >sklearn淺析(一)——sklearn的組織結構

sklearn淺析(一)——sklearn的組織結構

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

svm繼承關係

        這裡SVC即support vector classifier,SVR即support vector regression,svm既可以作為分類器,也可以作為迴歸器,所以,它們分別繼承實現了ClassifierMixin和RegressorMixin。

cluster

cluster部分繼承關係
        這裡以MeanShift和KMeans為例,可以看到KMeans實現了TransformerMixin類,因此它有一個transform方法。

統一的API介面

        在sklearn裡面,我們可以使用完全一樣的介面來實現不同的機器學習演算法,通俗的流程可以理解如下:

  1. 資料載入和預處理
  2. 定義分類器(迴歸器等等),譬如svc = svm.svc()
  3. 用訓練集對模型進行訓練,只需呼叫fit方法,svc.fit(X_train, y_train)
  4. 用訓練好的模型進行預測:y_pred=svc.predict(X_test)
  5. 對模型進行效能評估: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自身不提供抽象類和介面機制,因此需要藉助它來實現。詳情請自行百度。