用python对训练集和测试集进行特征规范化处理

系统 1808 0

个人理解这里的规范化处理指对提取后的特征集进行处理,不是对原始的数据信号进行处理,包括 归一化 标准化。

规范化的原因: 不同特征具有不同量级时会导致:a.数量级的差异将导致量级较大的特征占据主导地位;b.数量级的差异将导致迭代收敛速度减慢;c.依赖于样本距离的算法对于数据的数量级非常敏感。

归一化: X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} ,也就是原数据减去该特征列最小值,再除以该特征列的极差,将属性缩放到[0,1]之间。

标准化: X_{norm}=\frac{X-\mu }{\sqrt{\sigma ^{2}}} ,也就是原数据减去该特征列的均值,再除以该特征列的标准差。

注意:

1.所谓规范化是对特征列的规范化,不是对样本的特征向量规范化(如将一个人身高、年龄、体重等属性规范化没有意义);

2.应将训练集和测试集分开后再规范化处理,测试集使用的是训练集保留下的参数(归一化的max、min,标准化的mean、std),也就是训练集规范化时使用自己的最大值最小值、均值方差,测试集规范化计算时仍使用训练集的最大值最小值、均值方差。

【例】

训练集两个样本,含三个特征, x_{train}=\begin{bmatrix} 1 &2 &3 \\ 2&3 &4 \end{bmatrix} ,测试集也是两个样本,三个特征, x_{test}=\begin{bmatrix} 1 &1 &1 \\ 2&2 &2 \end{bmatrix}

归一化: 由训练集得到参数 min=(1,2,3),max=(2,3,4),则

 训练集第一维特征的第一个数据1的计算为 x=\frac{1-1}{2-1}=0 ,测试集第二维特征的第一个数据1的计算为 x=\frac{1-2}{3-2}=-1 .

标准化: 由训练集得到参数 mean=(3/2, 5/2, 7/2), std=(1/2, 1/2, 1/2),则

训练集第一维特征的第一个数据1的计算为 x=\frac{1-3/2}{1/2}=-1 ,测试集第二维特征的第一个数据1的计算为 x=\frac{1-5/2}{1/2}=-3 .

 

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)
            
          

运行结果:

                   用python对训练集和测试集进行特征规范化处理_第1张图片

参考

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论