3.2 Sklearn常用类及其结构
Sklearn易于上手,功能多样,函数丰富,开发人员可以通过仅仅改变几行代码实现不同的算法。
下面按照模型开发流程介绍部分Sklearn的相关类。
3.2.1 数据源、数据预处理及数据提取
在机器学习模型开发流程中,首先要做的就是数据预处理,因为当得到采集数据时,这种数据并不一定适用于模型训练,如文本数据、不同维度取值范围差异过大的数据等,还有采集数据本身结构存在缺陷的数据,如存在缺失的数据等,这样的数据被称为脏数据,而这样的数据需要进行“清洗”,这个清洗过程就是数据预处理。
对于数据预处理这样的场景,Sklearn提供了以下几类用于生成或者得到符合训练标准的数据。
数据源(sklearn.datasets)——该模块提供加载数据集的实用程序,以及人工数据生成器的方法。
对于加载数据集的实用程序(Loader),其类通常以sklearn.datasets.load_<数据名称>或者sklearn.datasets.fetch_<dataset_name>的形式呈现,具体代码如下:
还有一种数据源生成器的方式,尤其是在聚类或者分类实验场景中,需要可供练习的数据源。因为外部数据元也无法满足其训练需要,所以通过生成数据的方式完成训练,通常以sklearn.datasets.load_<数据分布>的形式呈现,具体代码如下:
以上引用数据源,通常用于模型的试验或者为练习提供数据,在实际模型开发场景中,还涉及数据预处理,下面先介绍一般数据的预处理过程,这里所说的一般数据是指以数值形式存在的数据(用于区别文本数据)。
一般数据预处理(sklearn.preprocessing)——模块包括但不限于缩放、中心化、归一化、二值化和归一化方法。其具体使用将在后面的章节详细介绍。
除此之外,对非一般数据,如文本数据或者图形数据,也存在对应的预处理方法,而这种方法也被称为特征提取。
特征提取(sklearn.feature_extraction)——从原始数据中提取特征,目前包括从文本和图像中提取特征的方法。值得注意的是,对文本数据提取和图形数据提取在不同的模块。
文本数据提取(sklearn.feature_extraction.image)——从图形数据中抽取特征,其方法有补丁提取、像素到像素梯度连接图转化(Graph of Pixel Gradient Connections)等。
3.2.2 模型建立
模型建立是模型开发整个流程中最关键的环节,其他环节都是围绕模型而存在的。而模型从大的类目上又分为监督学习、无监督学习和半监督学习,在后面的章节中将会详细介绍三者之间的区别;如果更进一步划分,在这些大的类目的基础上又存在诸如聚类、分类、回归、降维等小的类目。下面按照具体机器学习方法对其相应的类进行介绍。
·聚类(sklearn.cluster.*)——聚类是一种无监督方法,其将特征相近的数据划归到同一类,并不需要对其数据本身标注标签。在此类中,收录了几乎全部主流的聚类方法,如K-means聚类、均值偏移聚类、亲和传播、DBSCAN等。
·降维(sklearn.decomposition.*)——该模块包括一些矩阵分解算法,如主成分分析、NMF或者独立成因分析等,大部分算法都可以看作一种降维技术。降维属于一种无监督学习方法。
·高斯过程(sklearn.gaussian_process.*)——高斯过程既可以用于分类,也可以用于回归,其假设前提是大量独立的、均匀微小的随机变量的总和近似地服从高斯分布,通过对训练数据的高斯假设,生成相应的拟合函数。
·广义线性模型(sklearn.linear_model.*)——广义线性模型模块包含了常用的广义线性模型集。它包括岭回归、贝叶斯回归、LASSO和弹性网络回归。
·流形学习(sklearn.manifold.*)——流形学习的本质实际上是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,这也是一种降维方法,同样,该模块包含ISOMAP、局部线性嵌入等嵌入方法。
·高斯混合(sklearn.mixture.*)——该模块包括高斯混合建模方法,其假设前提是任意模型满足多个高斯模型的叠加组合。
·多类别、多标签分类(sklearn.multiclass.*)——该模块提供了多类别学习算法,其中包括一对多、多对多、纠错输出码等方法。
·朴素贝叶斯(sklearn.naive_bayes.*)——该模块包括朴素贝叶斯算法,是一种基于贝叶斯定理和强(朴素)特征独立性假设的监督学习方法。
·最临近方法(sklearn.neighbors.*)——该模块包括最临近算法,是聚类中常见的一种方法。
·半监督学习(sklearn.semi_supervised.*)——该模块包括半监督学习算法,其思路是利用少量的标记数据和大量的未标记数据进行分类,代表性方法有标签传播及标签扩散。
·支持向量机(sklearn.svm.*)——该模块包括支持向量机的各种算法,其算法可用于回归、分类等场景。
·决策树(sklearn.tree.*)——该模块包括决策树算法,其算法可用于回归和分类。
·集成学习(sklearn.ensemble.*)——该模块包括基于集成的分类、回归和异常检测方法。
以上是Sklearn能够提供的主流机器学习方法,当然,它也提供深度学习的模型实现,但是更全面的模型实现在Keras库中,在Sklearn环境不进行介绍。
3.2.3 模型验证
在模型建立完成并训练之后,需要对模型的实际效果进行检验——对所训练的模型进行量化上的效果验证,是模型开发中比较重要的环节,是评估模型效果的依据。
除以上验证方法外,模型验证(sklearn.metrics.*和部分sklearn.model_selection.*)还有成对验证(Pairwise Validation)、双聚类(Biclustering)验证等方法。
采用ROC方法对模型进行验证如图3-2所示。
图3-2 采用ROC方法对模型进行验证
3.2.4 模型调优
模型验证之后,如果不能满足业务场景对模型的要求,那么此时需要提高模型的性能。
在Sklearn中,模型调优主要是对参数的尝试(穷举、随机或者给定参数集合),并通过验证得到最优解的超参数。其涉及的类为sklearn.model_selection.*。