在sklearn中有这么几个常用的预处理方法。另外为了将数据预处理的各个阶段连接起来还可以使用pipeline。
类 | 功能 | 说明 |
---|---|---|
StandardScaler | 无量纲化 | 标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布 |
MinMaxScaler | 无量纲化 | 区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上 |
Normalizer | 归一化 | 基于特征矩阵的行,将样本向量转换为“单位向量” |
Binarizer | 二值化 | 基于给定阈值,将定量特征按阈值划分 |
OneHotEncoder | 哑编码 | 将定性数据编码为定量数据 |
Imputer | 缺失值计算 | 计算缺失值,缺失值可填充为均值等 |
PolynomialFeatures | 多项式数据转换 | 多项式数据转换 |
FunctionTransformer | 自定义单元数据转换 | 使用单变元的函数来转换数据函数来转换数据 |
具体代码实现
首先准备数据
from sklearn.datasets import load_iris
iris = load_iris()
train_data = iris.data
target_data = iris.target
然后是sklearn的具体实现
"""
缺失值计算
"""
#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
from sklearn.preprocessing import Imputer
Imputer().fit_transform(train_data)
"""
无量纲化
"""
#1.标准化
#根据【均值】和【标准差】调整
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(train_data)
#2.区间缩放
#利用最大最小值缩放
#区间缩放,返回值为缩放到[0, 1]区间的数据
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(train_data)
#3.正则化
#正则化和标准化的区别是正则化是根据【特征均值】和【特征值标准差】调整
from sklearn.preprocessing import Normalizer
Normalizer().fit_transform(train_data)
"""
对定量特征二值化
"""
#主要是阈值设定 threshold=n
#阈值设置为3,返回值为二值化后的数据
from sklearn.preprocessing import Binarizer
Binarizer(threshold=3).fit_transform(train_data)
"""
对定性特征哑编码
TODO iris数据都是定量的,没必要做
"""
#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
from sklearn.preprocessing import OneHotEncoder
OneHotEncoder().fit_transform(target_data.reshape((1,-1)))
"""
数据变换
"""
#1.多项式转换
#参数degree为度,默认值为2
from sklearn.preprocessing import PolynomialFeatures
PolynomialFeatures().fit_transform(train_data)
#2.自定义转换函数
#第一个参数是单变元函数
#本例为对数函数的数据变换
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
FunctionTransformer(log1p).fit_transform(train_data)
注:
基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。
基于参数的模型或基于距离的模型,都是要进行特征的归一化。