特征工程思维导图如下图。 本文借助sklearn介绍其中的预处理部分
二 单特征预处理
<1> 标准化 Standardization 或者叫 mean removal and variance scaling(平均值移除、方差缩放)
说明1: 标准化其实就是干两件事:“transform the data to center” ,即使数据平均值为0;
“scale it by dividing non-constant features by their standard deviation”,即标准差为1
(1) sklearn 提供了scale做数据标准化:
>>> from sklearn import preprocessing
>>> import numpy as np
>>> X = np.array([[1., -1., 2.],
... [2., 0., 0.],
... [0., 1., -1.]])
>>> X_scaled = preprocessing.scale(X)
>>> X_scaled
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
>>> X_scaled.mean(axis=0)
array([ 0., 0., 0.])
>>> X_scaled.std(axis=0)
array([ 1., 1., 1.])
preprocessing 提供了另一个实用的类StandardScaler,它的fit函数解析训练数据(包括值和矩阵格式),transform则对
数据执行standardization过程。 在训练数据上使用的StandardScalar对象可以再使用在测试数据上
>>> scaler = preprocessing.StandardScaler().fit(X)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_
array([ 1. , 0. , 0.33333333])
>>> scaler.scale_
array([ 0.81649658, 0.81649658, 1.24721913])
>>> scaler.transform(X)
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
>>> X_test = np.array([[-1., 1., 0.]])
>>> scaler.transform(X_test)
array([[-2.44948974, 1.22474487, -0.26726124]])
StandardScaler的构造函数中可以关闭with_mean和with_std
(2) 缩放至一定范围
先介绍MinMaxScaler的使用, 使用max - min作为分母
>>> X_train = np.array([[1., -1., 2.],
... [2., 0., 0.],
... [0., 1., -1]])
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5 , 0. , 1. ],
[ 1. , 0.5 , 0.33333333],
[ 0. , 1. , 0. ]])
>>> X_test = np.array([[ -3., -1., 4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5 , 0. , 1.66666667]])
在介绍MaxAbsScaler, 将最大的绝对值作为分母
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. , 1. ],
[ 1. , 0. , 0. ],
[ 0. , 1. , -0.5]])
>>> X_test = np.array([[ -3., -1., 4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. , 2. ]])
>>> max_abs_scaler.scale_
array([ 2., 1., 2.])
如果不想创建scaler对象、不需要后面的test data上使用,可以使用 minmax_scale和maxabs_scale方法