sklearn默认接收的对象类型是数组,即无论是特征矩阵还是标签数组,最好都先转化成array对象类型再进行输入。此外,sklearn还能够处理array-like的数据,例如和数组形式相同的列表,但并不建议这么做。同时,在sklearn中,我们往往以称特征矩阵为Features Matrix,称特征数组为Target Vector,并且以n_samples表示数据行数、n_features表示特征矩阵列数:
![](https://img.haomeiwen.com/i27579716/2b7e0fccaf5ed1e4.jpg)
Scikit-Learn内容分布与查找
sklearn的六大功能模块
首先,从建模功能上进行区分,sklearn将所有的评估器和函数功能分为六大类,分别是分类模型(Classification)、回归模型(Regression)、聚类模型(Clustering)、降维方法(Dimensionality reduction)、模型选择(Model selection)和数据预处理六大类。
其中分类模型、回归模型和聚类模型是机器学习内主流的三大类模型,其功能实现主要依靠评估器类,并且前两者是有监督学习、聚类模型属于无监督学习范畴。
当然,sklearn中并未包含关联规则相关算法,如Apriori或者FP-Growth,这其实一定程度上和sklearn只能处理array-like类型对象有关。而后三者,降维方法、模型选择方法和数据预处理方法,则多为辅助建模的相关方法,并且既有评估器也有实用函数。
Scikit-Learn常用功能
![](https://img.haomeiwen.com/i27579716/80fdf487c41227e1.jpg)
![](https://img.haomeiwen.com/i27579716/6d42b7126347a32f.jpg)
sklearn中的数据集切分方法
from sklearn.model_selection import train_test_split
查阅该函数的帮助文档
train_test_split?
train_test_split(X, y, random_state=42,stratify=y)
此处有两个地方需要注意,其一是随机数种子的设置,和此前手动定义的数据集切分函数一样,random_state取值不同,切分结果就会各有不同。
stratify
参数则是控制训练集和测试集不同类别样本所占比例的参数,若希望切分后的训练集和测试集中0、1两类的比例和原始数据相同(1:1),则可另stratify=y
尽管随机数种子仍然会发挥作用,但由于计算流程发生了变化,最终切分出来的结果将和此前的切分结果不同(但都会保持(1:1)的分布比例)。
sklearn中的数据标准化与归一化
从功能上划分,sklearn中的归一化其实是分为标准化(Standardization)和归一化(Normalization)两类。其中,此前所介绍的Z-Score标准化和0-1标准化,都属于Standardization的范畴,而在sklearn中,Normalization则特指针对单个样本(一行数据)利用其范数进行放缩的过程。不过二者都属于数据预处理范畴,都在sklearn中的Preprocessing data模块下。
from sklearn import preprocessing
标准化 Standardization
sklearn的标准化过程,即包括Z-Score标准化,也包括0-1标准化,并且即可以通过实用函数来进行标准化处理,同时也可以利用评估器来执行标准化过程。
Z-Score
实用函数
通过preprocessing模块下的scale函数进行快速的Z-Score标准化处理。
preprocessing.scale?
preprocessing.scale(X)
z_score(X)
实用函数进行标准化处理,尽管从代码实现角度来看清晰易懂,但却不适用于许多实际的机器学习建模场景。
其一是因为在进行数据集的训练集和测试集切分后,我们首先要在训练集进行标准化、然后统计训练集上统计均值和方差再对测试集进行标准化处理,因此其实还需要一个统计训练集相关统计量的过程;
其二则是因为相比实用函数,sklearn中的评估器其实会有一个非常便捷的串联的功能,sklearn中提供了Pipeline工具能够对多个评估器进行串联进而组成一个机器学习流,从而简化模型在重复调用时候所需代码量。
因此通过评估器的方法进行数据标准化,其实是一种更加通用的选择。
实用评估器进行数据标准化流程
评估器导入
from sklearn.preprocessing import StandardScaler
查阅评估器参数,然后进行评估器的实例化
查阅参数
StandardScaler?
scaler = StandardScaler()
...处理好train
scaler.fit(X_train)
评估器最终计算结果都可以通过相关属性进行调用和查看。
查看训练数据各列的标准差
scaler.scale_
查看训练数据各列的均值
scaler.mean_
查看训练数据各列的方差
scaler.var_
np.sqrt(scaler.var_)
总共有效的训练数据条数
scaler.n_samples_seen_
通过评估器中的transform方法来进行数据标准化处理。注意,算法模型的评估器是利用predict方法进行数值预测,而标准化评估器则是利用transform方法进行数据的数值转化。
利用训练集的均值和方差对训练集进行标准化处理
scaler.transform(X_train)
利用训练集的均值和方差对测试集进行标准化处理
scaler.transform(X_test)
z_score(X_train)
此外,还可以使用fit_transform对输入数据进行直接转化:
scaler = StandardScaler()
一步执行在X_train上fit和transfrom两个操作
scaler.fit_transform(X_train)
接下来就能直接带入标准化后的数据进行建模了。
0-1标准化
和Z-Score标准化类似,0-1标准化也有函数实现和评估器实现两种。
函数实现
查看函数说明文档
preprocessing.minmax_scale?
preprocessing.minmax_scale(X)
对比自定义函数计算结果
maxmin_norm(X)
调用评估器进行0-1标准化。
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler?
scaler = MinMaxScaler()
scaler.fit_transform(X)
scaler.data_min_
scaler.data_max_
归一化 Normalization
和标准化不同,sklearn中的归一化特指将单个样本(一行数据)放缩为单位范数(1范数或者2范数为单位范数)的过程,该操作常见于核方法或者衡量样本之间相似性的过程中。同样,归一化也有函数实现和评估器实现两种方法。
preprocessing.normalize?
1-范数单位化过程
preprocessing.normalize(X, norm='l1')
2-范数单位化过程
preprocessing.normalize(X, norm='l2')
sklearn中的Normalization过程,实际上就是将每一行数据视作一个向量,然后用每一行数据去除以该行数据的1-范数或者2-范数。具体除以哪个范数,以preprocessing.normalize函数中输入的norm参数为准。
除了标准化和归一化之外,还有一个正则化(Regularization)的概念,所谓正则化,往往指的是通过在损失函数上加入参数的1-范数或者2-范数的过程,该过程能够有效避免模型过拟合。
网友评论