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

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

规范化的原因:不同特征具有不同量级时会导致: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)

运行结果:

                  

参考

1.[机器学习] 数据特征 标准化和归一化_特征化和归一化_奇思闻影的舒克与贝克的博客-CSDN博客

2.https://www.cnblogs.com/dearL/p/9532288.html

3.scikit-learn数据预处理fit_transform()与transform()的区别_scikit fit transform_小白沉淀的博客-CSDN博客

4.https://www.cnblogs.com/dan-baishucaizi/p/9107858.html

  • 3
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禺垣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值