数据预处理(特征值转化)
1、简介
我们知道,MNIST数据集中的样本特征是从0-255的灰度值,0表示白,而255表示黑,中间的数值代表不同深度的灰色。通过除以255的操作,我们可以把所有的特征值限定到0-1之间,从而有利于模型计算,提高模型的准确率,这就是一种简单的数据预处理(data preprocessing)。数据预处理的方法有那些呢,请看下文。
2、预处理模型
-
Standardization
实质是将所有数据的特征转化为均值为0,而方差为1的状态,这样就可以确保数据的“大小”都是一致的,这样有利于模型的训练。
from sklearn.preprocessing import StandardScaler
# 可以用训练好的scaler去转换其他数据,这样它们就处于同样的分布下了
scaler = preprocessing.StandardScaler().fit(X)
在以下这些算法中,特征值服的分布对机器学习的结果影响很大:
- KNN
- K-Means
- SVM
- PCA
- RBF Kernel
- Logistic regression
- Linear discriminant analysis
- l1 and l2 regularizers of linear models
只有基于树模型的算法是scale-invariant的,比如说决策树,随机深林等,数据的范围对模型的最终结果没有影响。
-
MinMaxScaler
实质将所有的数据压进了一个长和宽都是1的方格子中,这样会让模型的训练速度更快且准确率也会提高,在图像处理(image processing)中用到。
-
MaxAbsScaler
实质和Min-Max scaling一样将数值压缩到一定范围内[-1,1]。计算方法是将所有的特征值除以最大值;用在数值已经以0为中心(均值=0),或者稀疏数据中。
-
RobustScaler
实质利用中位数和四位数进行转化,特别称谓 “粗暴缩放”,他会直接把一些异常值踢出去,有点类似于我们的评委说 “去掉一个最高分,去掉一个最低分” 这样的情况;与standardScaler非常相似,但因为原理不同,所得到的结果也不同。
-
Normalizer
实质将所有样本的特征向量转化为欧几里得距离为1,也就是说,它把数据的分布变成一个半径为1的圆,或者一个球。Normalizer通常是在我们只想保留数据特征向量的方向,而忽略其数值的时候使用。Normalizer会将原始数据变的最面目全非的方法了。
-
Imputation of missing values
归置缺失值
sklearn.preprocessing.Imputer(
missing_values='NaN', # 识别确实值
strategy='mean', # 填充缺失值的策略为填充平均值
axis=0, verbose=0, copy=True)
-
Generating polynomial features
丰富特征,一般在特征向量比较少的情况下使用,会把模型搞得复杂起来。
sklearn.preprocessing.PolynomialFeatures(
degree=2,
interaction_only=False,
include_bias=True)
生成多项的、相互影响的特征值。比如一个[a,b]两个特征的数据,用degree=2的PolynomialFeatures转换之后会变成[1, a, b, a^2, ab, b^2]这么多特征。
-
Custom transformers
自定义需要转化的格式
sklearn.preprocessing.FunctionTransformer(
func=None,
inverse_func=None,
validate=True,
accept_sparse=False,
pass_y=False, kw_args=None, inv_kw_args=None)
数据预处理的各方法总结
类 | 功能 | 说明 |
---|---|---|
StandardScaler | 无量纲化 | 标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布 |
MinMaxScaler | 无量纲化 | 区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上 |
Normalizer | 归一化 | 基于特征矩阵的行,将样本向量转换为“单位向量” |
Binarizer | 二值化 | 基于给定阈值,将定量特征按阈值划分 |
OneHotEncoder | 哑编码 | 将定性数据编码为定量数据 |
Imputer | 缺失值计算 | 计算缺失值,缺失值可填充为均值等 |
PolynomialFeatures | 多项式数据转换 | 多项式数据转换 |
FunctionTransformer | 自定义单元数据转换 | 使用单变元的函数来转换数据 |