sklearn中提供了数据预处理的模块,该模块包括了scaling(缩放),centering(中心化),normalization(归一化),binarization(二值化)和imputation(缺失值填补)操作。
实际上metric-based和gradient-based模型都假设输入的特征是标准正态分布的。而决策树是一个例外,它能接受任意scale的数据。sklearn提供的例子,比较各种scaling方法的区别
关于稀疏矩阵:
CSR: Compressed Sparse Rows(see scipy.sparse.csr_matrix)
CSC: Compressed Sparse Columns(see scipy.sparse.csc_matrix)
任何稀疏输入都可以转换成CSR表示
线性变换
函数 | 作用 | 重要参数 | 使用说明 | 备注 |
---|
scale(X[, axis, with_mean, …]) | 标准化数据集 | axis:如果为0,则分别对每一个特征标准化,如果为1,则对每一个样本进行标准化;with_mean:如果为真,则再scaling前先中心化数据;with_std:如果为真,则将数据的方差变为1 | 不要用于稀疏矩阵,除非with_mean=False;对于NAN,会自动忽略,接受一维数据 | |
StandarScaler([copy, …]) | 标准化数据集 | 同scale | 对于CSR和CSC矩阵,需将with_mean=False来避免破坏数据的稀疏结构,需先fit(data)再transform(data) | 相当于scale有了API |
MinMaxScaler([feature_range, copy]) | 将特征缩放到所给的范围内 | feature_range:需要缩放至的范围,默认是(0,1) | 用于小方差的数据和保留稀疏数据中的0 | |
MaxAbsScaler([copy]) | 以每个特征最大值的绝对值来进行缩放,缩放后的数据范围是[-1,1] | 无 | 适用于数据已经是标准化数据或是稀疏数据。用于小方差的数据和保留稀疏数据中的0,也可用于CSR和CSC矩阵 | |
minmax_scale(X[, …]) | 将特征scaling至给定范围 | feature_range:同MinMaxScaler;axis:同scale | 不产生object,一个简易入口 | |
maxabs_scale(X[, axis, copy]) | 在不破坏稀疏性的前提下,将数据,,接受一维数据缩放至[-1,1] | axis:同scale | 不产生object,一个简易入口,,接受一维数据 | |
RobustScaler([with_centering, …]) | 针对异常点的标准化 | with_centering:如果为真,scaling钱中心化。如果输入的是稀疏矩阵,那么with_centering=False,否则会爆内存;with_scaling:如果为真,将数据缩放至四分位范围内;quantile_range:默认为(25.0,75.0,),缩放范围 | 该标准化将数据去掉中心值后将数据压缩至1/4分位点到3/4分位点之间。 | |
robust_scale(X[, axis, …]) | 针对异常点的标准化 | 基本同RobustScaler,axis:同scale | | |
KernelCenterer | 中心化一个核矩阵 | | | |
非线性转换
函数 | 作用 | 重要参数 | 使用说明 | 备注 |
---|
QuantileTransformer([…]) | 利用分位点信息进行数据转换成均匀分布或是正态分布 | n_quantiles:要计算的分位数的数目;output_distribution:选择是正态分布还是均匀分布;ignore_implicit_zeros:输入为稀疏矩阵时使用 | 会使不同大小的数据可比性更强。比起scaling,受异常点的影响更小,但是会扭曲特征间的关联和距离。 | |
quantile_transform(X[, axis, …]) | 利用分位点信息进行数据转换成均匀分布或是正态分布 | 基本同QuantileTransformer([…]) | 不产生object,一个简易入口 | |
PowerTransformer([method, …]) | 利用power transformations将数据转换成高斯分布 | method:转换方法,根据数据有无负数来选择;standardize:是否标准化 | 用于稳定方差和减少偏度 | 需要进行数据可视化来确定是否真得转换成高斯分布 |
power_transform(X[, method, …]) | 基本同PowerTransformer | | | |
Normalization
函数 | 作用 | 重要参数 | 使用说明 |
---|
Normalizer([norm,copy]) | 将样本标准化 | norm:用于标准化非零样本的准则,可选’l1’,'l2’以及‘max’ | 常用于文本分类和聚类 ,接受CSR |
normalize(X[, norm, axis, …]) | 基本同Normalizer | | |
对于分类特征进行编码
函数 | 作用 | 重要参数 | 使用说明 |
---|
OrdinalEncoder([categories, dtype]) | 将类别特征转换成一个数组 | categories:赋予每一特征独特的值;dtype:可选择输出的类型 | 不建议使用该方法,因为会给模型引用排序信息 |
OneHotEncoder([n_values, …]) | 独热码 | sparse:如果为真时,返回一个稀疏矩阵,否则返回一个数组;handle_unknown:处理未出现过的特征的方法;categorical_features:需要被转换的分类特征 | 标签也要用LabelBinarizer进行转换 |
离散化
可以给线性模型引用非线性元素
函数 | 作用 | 重要参数 | 使用说明 |
---|
KBinsDiscretizer([n_bins, …]) | 将连续数据离散化 | n_bins:区间个数;encode:编码方式;strategy:决定bins长度的策略 | |
Binarizer([threshold, copy]) | 二值化特征 | threshold:阈值 | 如果特征理论上符合多变量伯努利分布时使用sklearn.neural_network.BernoulliRBM,也常用于文本分析 |
binarize(X[, threshold, copy]) | 基本与Binarizer相同 | | |
生成多项式特征
函数 | 作用 | 重要参数 | 使用说明 |
---|
PolynomialFeatures | 生成多项式和相互作用的特征 | degree:多项式的次数;interaction_only:是否生成交互的特征;include_bias:是否添加零次项 | 高次项会导致过拟合 |
定制转换法则
函数 | 作用 |
---|
FunctionTransformer | 可自我定制转换方式 |
其他
函数 | 作用 | 重要参数 | 使用说明 |
---|
LabelBinarizer([neg_label, …]) | 将标签进行独热编码 | neg_label:用该值对负数进行编码;pos_label:用该值对正数进行编码;sparse_output:如果为真,输出为CSR | 可将一个特征变成多个特征 |
LabelEncoder | 将标签进行标号 | | |
MultiLabelBinarizer([classes, …]) | 在iterables的iterable和多标签格式之间进行转换 | | |
add_dummy_feature(X[, value]) | 增加一个额外的虚拟数据集 | | |
label_binarize(y, classes[, …]) | 同LabelBinarizer | | |