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

【机器学习】数据归一化——MinMaxScaler理解文章目录前言公式实例前言前阵在查sklearn的归一化方法MinMaxScaler的时候,发现找到的文章解释的一塌糊涂,一般都是扔个公式加一堆代码就敷衍了事了,所以这次写一篇讲述MinMaxScaler核心功能的文章。公式会查MinMaxScaler的基本上都应该理解数据归一化,本质上是将数据点映射到了[0,1]区间(默认),但实际使用的的时候也不一定是到[0,1],你也可以指定参数feature_range,映射到其他区间,这个后面再讲。首先了解该计算公式:Xstd=X−X.min(axis

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

文章目录

前言

前阵在查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)XX.min(axis=0)Xscaled=Xstd(maxmin)+min
乍看一下很懵逼,解释一下:

  • X:要归一化的数据,通常是二维矩阵,例如
    [[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]区间

实例

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

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]以外的区间,如下代码:

scaler2 = MinMaxScaler(feature_range=[1,2])
print('自动归一化结果:\n{}'.format(scaler2.fit_transform(data)))

在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • E. Riding in a Lift(Codeforces Round #274)「建议收藏」

    E. Riding in a Lift(Codeforces Round #274)

    2022年1月25日
    67
  • Lunix_UNIX/LINUX

    Lunix_UNIX/LINUXlinux关机和重启命令(转)Lunix/Unix1.shutdownshutdown命令用于安全关闭Linux系统。shutdown命令的部分参数如下:[-t]指定在多长时间之后关闭系统[-r]重启系统[-k]并不真正关机,只是给每个登录用户发送警告信号[-h]关闭系统(halt)shutdown命令的工作实质是给ini…

    2022年10月4日
    0
  • redis被击穿_redis的击穿和雪崩

    redis被击穿_redis的击穿和雪崩Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。本篇文章,并不是要更加完美的解决这三个问题,也不是要颠覆业界流行的解决方案。而是,…

    2022年9月14日
    0
  • Java后端学习路线图,你真的只需要这一张!

    Java后端学习路线图,你真的只需要这一张!原文链接前言学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点。所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。闲言少叙,我们还…

    2022年5月17日
    46
  • 抖音baby什么歌_anyway before 抖音

    抖音baby什么歌_anyway before 抖音抖音视频详情API接口

    2022年10月3日
    1
  • JAVA 实习面试题大全必看

    JAVA实习面试题大全必看JavaSE88基础语法9Q1:简单说说Java有哪些数据类型答:①分为基本数据类型和引用数据类型。②基本数据类型包括:数值型(byte、short、int、long、float、double),字符型(char)以及布尔型(boolean)。除了基本类型外,其他数据类型都属于引用类型,包括类、接口、数组等。Q2:floatnumber=3.4;有没有问…

    2022年4月6日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号