机器学习_数据归一化

常用的有几种特征缩放的方法:包括标准化数据的压缩(也叫归一化),以及规范化等。

特征缩放对于机器学习特别重要,可以让机器在读取数据的时候感觉更“舒服”,训练起来效率更高

这里就对数据进行归一化。归一化是按比例的线性缩放。数据归一化之后,数据分布不变,但是都落入一个小的特定区间,比如0~1或者-1~+1。
在这里插入图片描述

常见的一个归一化公式如下:
在这里插入图片描述

通过 Sklearn库中preprocessing(数据预处理)工具中的MinMaxScaler可以实现数据的归一化。

下面用自定义函数体验一下其中细节:

def scaler(train, test):#定义归一化函数,进行数据压缩
	min = train.min(axis=0)#训练集最小值 
	max = train.max(axis=0)#训练集最大值 
	gap = max - min#最大值和最小值的差 
	train -= min #所有数据减去最小值
	train /= gap #所有数据除以最大值和最小值的差 	test -- min把训练集最小值应用于测试集
	test /= gap#把训练集最大值和最小值的差应用于测试集 
	return train, test#返回压缩后的数据

这个函数的功能也等价于下面的伪代码:
#数据的归一化
x_norm = (x_data - np.min(x_data))/(np.max(x_data)- np.min(x_data)).values

上面的代码中,特别需要注意的是归一化过程中的最大值(max)、最小值(min),以及最大值和最小值之间的差(gap),全都来自训练集。不能使用测试集中的数据信息进行特征缩放中间步骤中任何值的计算。举例来说,如果训练集中的广告投放金额最大值是350,测试集中的广告投放金额最大值是380,尽管380大于350,但归一化函数还是要以350作为最大值,来处理训练集和测试集的所有数据。

为什么非要这样做呢?因为,在建立机器学习模型时,理论上测试集还没有出现,所以这个
步骤一定要在拆分数据集之后进行。有很多人先对整个数据集进行特征缩放,然后拆分数据集这种做法是不谨慎的,会把测试集中的部分信息泄露到机器学习的建模过程之中。下面的代码使用刚才定义的归一化函数对特征和标签进行归一化。

x_train,x_test = scaler(X_train, x_test) #对特征归一化 
y_train, y_test = scaler(y_train, y_test)#对标签也归一化

下面的代码显示数据被压缩处理之后的散点图,形状和之前的图完全一致,只是数值已被限制在一个较小的区间:

#用之前已经导入的matplotlib.pyplot 中的plot方法显示散点图
plt.plot(X_train, y_train, 'r.', label='Training data')#显示训练数据 plt.xlabel('wechat')#x轴标签 
plt.ylabel('sales')#y轴标签 
plt.legend()显示图例 
plt.show() #显示绘图结果

如果根据这个散点图手工绘制一条线,大概如下图所示的样子,这显示出微信公众号广告投放金额和销售额的线性关系
在这里插入图片描述


学习机器学习的参考资料:
(1)书籍
利用Python进行数据分析
西瓜书
百面机器学习
机器学习实战
阿里云天池大赛赛题解析(机器学习篇)
白话机器学习中的数学
零基础学机器学习
图解机器学习算法

(2)机构
光环大数据
开课吧
极客时间
七月在线
深度之眼
贪心学院
拉勾教育
博学谷

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值