个人理解这里的规范化处理指对提取后的特征集进行处理,不是对原始的数据信号进行处理,包括 归一化 和 标准化。
规范化的原因: 不同特征具有不同量级时会导致:a.数量级的差异将导致量级较大的特征占据主导地位;b.数量级的差异将导致迭代收敛速度减慢;c.依赖于样本距离的算法对于数据的数量级非常敏感。
归一化: ,也就是原数据减去该特征列最小值,再除以该特征列的极差,将属性缩放到[0,1]之间。
标准化: ,也就是原数据减去该特征列的均值,再除以该特征列的标准差。
注意:
1.所谓规范化是对特征列的规范化,不是对样本的特征向量规范化(如将一个人身高、年龄、体重等属性规范化没有意义);
2.应将训练集和测试集分开后再规范化处理,测试集使用的是训练集保留下的参数(归一化的max、min,标准化的mean、std),也就是训练集规范化时使用自己的最大值最小值、均值方差,测试集规范化计算时仍使用训练集的最大值最小值、均值方差。
【例】
训练集两个样本,含三个特征, ,测试集也是两个样本,三个特征, 。
归一化: 由训练集得到参数 min=(1,2,3),max=(2,3,4),则
训练集第一维特征的第一个数据1的计算为 ,测试集第二维特征的第一个数据1的计算为 .
标准化: 由训练集得到参数 mean=(3/2, 5/2, 7/2), std=(1/2, 1/2, 1/2),则
训练集第一维特征的第一个数据1的计算为 ,测试集第二维特征的第一个数据1的计算为 .
python实现:
可由 sklearn.preprocessing.MinMaxScaler 和 sklearn.preprocessing.StandardScaler 实现,训练集使用函数 fit_transform(),测试集使用函数 transform()。示例如下:
import numpy as np
from sklearn.preprocessing import MinMaxScaler #归一化:最值
from sklearn.preprocessing import StandardScaler #标准化:均值方差
#训练集,两行三列,两个样本、三个特征
x_train = np.array([[1.0,2.0,3.0],
[2.0,3.0,4.0]])
#测试集,两行三列,两个样本、三个特征
x_test = np.array([[1.0,1.0,1.0],
[2.0,2.0,2.0]])
# 特征缩放:归一化
mms = MinMaxScaler()
x_train_norm = mms.fit_transform(x_train)
x_test_norm = mms.transform(x_test)
print('\n归一化:\n')
print('x_train_norm:\n',x_train_norm)
print('\nx_test_norm:\n',x_test_norm, "\n")
# 特征缩放:标准化
stdsc = StandardScaler()
x_train_std = stdsc.fit_transform(x_train)
x_test_std = stdsc.transform(x_test)
print('\n标准化:\n')
print('x_train_std:\n',x_train_std)
print('x_test_std:\n',x_test_std)
运行结果:
参考
1.https://blog.csdn.net/zwqjoy/article/details/81182102
2.https://www.cnblogs.com/dearL/p/9532288.html
3.https://blog.csdn.net/anecdotegyb/article/details/74857055
4.https://www.cnblogs.com/dan-baishucaizi/p/9107858.html