一、Sklearn简介

Scikit-learn(sklearn)是机器学习中常用的第三方模块算法库,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:

  • 简单高效的数据挖掘和数据分析工具
  • 让每个人能够在复杂环境中重复使用
  • 建立NumPy、Scipy、MatPlotLib之上
     

k fold python 不使用sklearn python中sklearn模块_子类

 

先介绍下sklearn内的模块组织算法类的顶层设计图

二、三大模块

1、监督学习(supervised learning)

1.

  1. neighbors:近邻算法
  2. svm:支持向量机
  3. kernel-ridge:核——岭回归
  4. discriminant_analysis:判别分析
  5. linear_model:广义线性模型

2.

  1. ensemle:集成方法
  2. tree:决策树
  3. naive_bayes:朴素贝叶斯
  4. cross_decomposition:交叉分解
  5. gaussian_process:高斯过程

3.

  1. neural_network:神经网络
  2. calibration:概率校准
  3. isotonic:保序回归
  4. feature_selection:特征选择
  5. multiclass:多类多标签算法

以上的每个模块都包括多个算法,在调用时直接import即可,譬如:

from sklearn.svm import SVC
svc = SVC()
from sklearn import datasets#引入数据集,sklearn包含众多数据集
from sklearn.model_selection import train_test_split#将数据分为测试集和训练集
from sklearn.neighbors import KNeighborsClassifier#利用邻近点方式训练数据

无监督学习(unsupervised learning)

1.

  1. decomposition:矩阵因子分解
  2. cluster:聚类
  3. manifold:流形学习
  4. mixture:高斯混合模型

2.

  1. neural_network:无监督神经网络
  2. density:密度估计
  3. covariance:协方差估计

使用方式同上。

数据变换

1.

  1. feature_extraction:特征抽取
  2. feature_selection:特征选择
  3. preprocess:预处理

2.

  1. random_projection:随机投影
  2. kernel_approximation:核逼近
  3. pipline:管道流(这个严格说不算是数据变换模块)

三、算法类的顶层设计图

 

  1. baseEstimator:所有评估器的父类
  2. ClassifierMixin:所有分类器的父类,其子类必须实现一个score函数
  3. RegressorMixin:所有回归器的父类,其子类必须实现一个score函数
  4. ClusterMixin:所有聚类的父类,其子类必须实现一个fit_predict函数
  5. BiClusterMixin:
  6. TransformerMixin:所有数据变换的父类,其子类必须实现一个fit_transform函数
  7. DensityMixin:所有密度估计相关的父类,其子类必须实现一个score函数
  8. MetaEsimatorMixin:可能是出于兼容性考虑,看名字就能知道,目前里面没有内容

我们以svmcluster为例,介绍其继承关系图:

svm

k fold python 不使用sklearn python中sklearn模块_子类_02

        这里SVC即support vector classifier,SVR即support vector regression,svm既可以作为分类器,也可以作为回归器,所以,它们分别继承实现了ClassifierMixin和RegressorMixin。

cluster
 

k fold python 不使用sklearn python中sklearn模块_父类_03

        这里以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)