Scikit-Learn 源碼研讀 (第一期)項目結構介紹


獲取Scikit-Learn項目的源代碼

無論是在windows還是Linux上,直接使用Git克隆項目即可,克隆之前需要把官方的項目Fork到自己的GitHub倉庫。項目地址:https://github.com/scikit-learn/scikit-learn.git

研讀源碼的工具

研讀源碼需要的一些前置知識

項目結構

整個SKlearn項目,核心的部分在sklearn這個包里面,算法的使用案例在example包里面

sklearn包的簡介

  • _check_build
    簡單的檢查是否正確編譯的腳本
  • _build_utils
    sklearn官方團隊構建這個項目時使用的一些支持性工具
  • _loss
    GLM算法中會用到的分布函數
  • cluster
    聚類算法的實現包。含有Birch/DBSCAN/Hierarchical/KMeans/Spectral等算法,其中kmeans算法提供elkan/fast/lloyd幾種實現方式(使用cpyton實現的)。
  • compose
    合成模型時使用的元學習器。
  • covariance
    計算特征間協方差
  • cross_decomposition
    包含CCA(典型相關分析)和PLS(偏最小二乘)兩種算法,這些算法主要用於探索兩個多元數據集之間的線型關系。
  • datasets
    sklearn自帶的數據采集器,主要功能時響應用戶的調用,從網絡下載玩具數據集,方便用戶簡單地跑跑算法。
  • decompostion
    矩陣分解算法包。包括PLA(主成分分析)、NMF(非負矩陣分解)、ICA(獨立成分分析),其中PLA有稀疏版本的實現。
  • ensemble
    集成算法包。主要的腳本有:_bagging.py(bagging算法),_forest.py(隨機森林),_gb(GBDT),_iforest.py(孤獨森林),_stacking.py(stacking方法),_voting.py(投票方法),_weight_boosting.py(主要就是AdaBoost算法)。注意,GBDT算法的實現過程有調用一個cpython版本的腳本_gradient_boosting.pyx,主要目的就是加快計算速度。
  • experimental
    實驗模塊
  • externals
    一些外部依賴腳本。
  • feature_extraction
    特征提取。目前支持同Text文檔和圖片中提取特征。
  • feature_selection
    特征選擇算法,主要是單變量的過濾算法(例如去除方差很小的特征)和遞歸特征刪除算法。這里的接口也可以用來做降維。
  • guassian_process
    高斯過程。分為分類和回歸兩個實現。
  • impute
    缺失值處理,例如使用KNN算法去填充缺失值。
  • inspection
    檢查模型的工具
  • linear_model
    線性模型包,包含線性回歸、邏輯回歸、LASSO、Ridge、感知機等等,內容非常多,是sklearn中的重點包
  • manifold
    實現數據嵌入技術的工具包,包括LLE、Iosmap、TSNE等等
  • metrics
    集合了所有的度量工具,包括常見的accuracy_socre、auc、f1_score、hinge_loss、roc_auc_score、roc_curve等等
  • mixture
    高斯混合模型、貝葉斯混合模型
  • model_selection
    sklearn的重點訓練工具包,包括常見的GridSearchCV、TimeSeriesSplit、KFold、cross_validate等
  • neighbors
    K近鄰算法包,包括球樹、KD樹、KNN分類、KNN回歸等算法的實現
  • neutral_network
    包含比較基礎的神經網絡模型,例如伯努利受限玻爾茲曼機、多層感知機分類、多層感知機回歸
  • preprocessing
    sklearn的重點數據預處理工具包,包括常見的LabelEncoder、MinMaxScaler、Normalizer、OneHotEncoder等
  • semi_supervises
    半監督學習算法包,LabelPropagation、LabelSpreading
  • svm
    支持向量機算法包,包括線性支持向量分類/回歸、SVC/SVR、OneClassSVM等,但是sklearn自己並沒有獨立去實現這一類算法,而是復用了很多libSVM的代碼
  • tests
    一些單元測試代碼
  • tree
    樹模型,包括決策樹、極端樹。注意,梯度提升樹算法放在ensemble包里。
  • utils
    加速計算、cython版本的BLAS算法、優化等工具包

sklearn實現算法的風格

sklearn中有若干個最基本的類,作為地基。例如 BaseEstimator 類、BaseSGD 類、ClassifierMixin、RegressorMixin等基礎類,然后所有的算法都是在繼承這些基類,並且自己實現fit等重要方法。所以,下一篇源碼研讀筆記,我會盡力去研究一下sklearn中這些最基礎的類,看看他們都是負責什么功能的。


如果有任何紕漏差錯,歡迎評論互動。

drawing


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM