一.特征标准化
1.1特征标准化:
标准化是指把数据缩放到拥有零均值(均值为0)和单位方差(方差为1)的过程。可以手动标准化我们的数据:每个数据点减去所有数据的平均值 (μ) , 然后除以数据的方差(σ) 。即对于每个特征值,计算(x - μ) / σ 。
1.2scikit-learn代码实现
使用preprocessing模块的scale()函数实现。
1.3验证
一个实现了标准化后的特征矩阵应该每行的均值等于(或接近于),每一行的方差都为1。可以查看矩阵的mean属性和std属性进行验证。
# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np
X = np.array(
[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
) # 创建一个三行三列的二维数组
x_scaled = preprocessing.scale(X)
print(x_scaled)
"""
输出结果:
[[-0.26726124 -1.33630621 1.33630621]
[ 1.33630621 0.26726124 -0.26726124]
[-1.06904497 1.06904497 -1.06904497]]
"""
# 方差验证
print(x_scaled.mean(axis=0)) # [7.40148683e-17 0.00000000e+00 0.00000000e+00]
print(x_scaled.std()) # 1.0
二.特征归一化
归一化是缩放单个样本以使它们拥有单位范数的过程。在scikit-learn中,数据可以使用normalize()函数进行归一化。
# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np
X = np.array(
[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
) # 创建一个三行三列的二维数组
x_normalize_ll = preprocessing.normalize(X, norm='l1') # L1范数(曼哈顿距离)
print(x_normalize_ll)
"""
输出结果:
[[ 0.2 -0.4 0.4]
[ 1. 0. 0. ]
[ 0. 0.5 -0.5]]
"""
三.将特征缩放到一定范围
3.1将特征缩放到一定范围
将特征缩放到最大值和最小值之间。一般来说,这两个值是0和1.这样每个特征值的最大绝对值就缩放到单位尺寸了。
3.2scikit-learn代码实现
使用sklearn.preprocessing
.MinMaxScaler类,通过向MinMaxScaler类的构造函数传入关键字参数feature_range来指定不同的范围。
3.3验证
# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np
X = np.array(
[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
) # 创建一个三行三列的二维数组
min_max_scaler = preprocessing.MinMaxScaler()
x_min_max = min_max_scaler.fit_transform(X)
# 默认情况
print(x_min_max)
"""
[[0.33333333 0. 1. ]
[1. 0.66666667 0.33333333]
[0. 1. 0. ]]
"""
# 指定范围
min_max_range = (-10, 10)
min_max_scaler2 = preprocessing.MinMaxScaler(feature_range=min_max_range)
x_min_max2 = min_max_scaler2.fit_transform(X)
print(x_min_max2)
"""
[[ -3.33333333 -10. 10. ]
[ 10. 3.33333333 -3.33333333]
[-10. 10. -10. ]]
"""
参考资料
[1].Michael Beyeler《Machine Learning for OpenCV》,https://github.com/mbeyeler/opencv-machine-learning
[2].MinMaxScaler类:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn-preprocessing-minmaxscaler