前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【机器学习】数据归一化——MinMaxScaler理解

【机器学习】数据归一化——MinMaxScaler理解

作者头像
全栈程序员站长
发布2022-11-10 15:47:38
2.9K0
发布2022-11-10 15:47:38
举报
文章被收录于专栏:全栈程序员必看

文章目录

前言

前阵在查sklearn的归一化方法MinMaxScaler的时候,发现找到的文章解释的一塌糊涂,一般都是扔个公式加一堆代码就敷衍了事了,所以这次写一篇讲述MinMaxScaler核心功能的文章。

公式

会查MinMaxScaler的基本上都应该理解数据归一化,本质上是将数据点映射到了[0,1]区间(默认),但实际使用的的时候也不一定是到[0,1],你也可以指定参数feature_range,映射到其他区间,这个后面再讲。


首先了解该计算公式: X s t d = X − X . m i n ( a x i s = 0 ) X . m a x ( a x i s = 0 ) − X . m i n ( a x i s = 0 ) X s c a l e d = X s t d ∗ ( m a x − m i n ) + m i n X_{std} = \frac{X – X.min(axis=0)}{X.max(axis=0) – X.min(axis=0)}\\ X_{scaled} = X_{std} * (max – min) + min Xstd​=X.max(axis=0)−X.min(axis=0)X−X.min(axis=0)​Xscaled​=Xstd​∗(max−min)+min 乍看一下很懵逼,解释一下:

X:要归一化的数据,通常是二维矩阵,例如

代码语言:javascript
复制
[[4,2,3]
[1,5,6]]

X.min(axis=0):每列中的最小值组成的行向量,如上面的例子中应该是[1,2,3]

X.max(axis=0):每列中的最大值组成的行向量,如上面的例子中应该是[4,5,6]

max: 要映射到的区间最大值,默认是1

min:要映射到的区间最小值,默认是0

X s t d X_{std} Xstd​: 标准化结果

X s c a l e d X_{scaled} Xscaled​: 归一化结果

再用朴实的语言描述一下上面公式所做的事:

  1. 第一步求每个列中元素到最小值距离占该列最大值和最小值距离的比例,这实际上已经是将数据放缩到了[0,1]区间上
  2. 第二步将标准化的数据映射到给定的[min,max]区间

实例

有了上面的基础,我们用代码实现一下这个归一化过程:

代码语言:javascript
复制
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.array([[4,2,3],
[1,5,6]])
# 手动归一化
feature_range = [0,1]  # 要映射的区间
print(data.min(axis=0))
print(data.max(axis=0))
x_std = (data-data.min(axis=0))/(data.max(axis=0)-data.min(axis=0))
x_scaled = x_std*(feature_range[1]-feature_range[0]) + feature_range[0]
print('手动归一化结果:\n{}'.format(x_scaled))
# 自动归一化
scaler = MinMaxScaler()
print('自动归一化结果:\n{}'.format(scaler.fit_transform(data)))
在这里插入图片描述
在这里插入图片描述

手动归一化的部分就是按照公式的,没什么好说,这里简要说一下sklearn。preprocessing.MinMaxScaler的用法,简单来说只有两步:

  1. 初始化一个MinMaxScaler对象:scaler = MinMaxScaler()
  2. 拟合并转换数据,本质上就是先求最大最小值,然后对数据按照公式计算:scaler.fit_transform(data)

前面说了,我们还可以将数据映射到[0,1]以外的区间,如下代码:

代码语言:javascript
复制
scaler2 = MinMaxScaler(feature_range=[1,2])
print('自动归一化结果:\n{}'.format(scaler2.fit_transform(data)))
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183244.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 公式
  • 实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档