机器学习系列:2. 数据预处理(1):归一化(Normalization)和标准化(Standardization)

Abstract:

归一化和标准化是数据预处理的常用手段,也已经有了众多文章对于概念的介绍。本文着重对归一化和标准化的一些注意事项做详细的解释。

一、概念:

1. 归一化(Normalization):

        归一化是利用特征(可理解为某个数据集合)的最大值,最小值,将特征的值缩放到[0,1]区间,对于每一列的特征使用min - max函数进行缩放。利用数据集每个特征的最大值,最小值,将特征的值缩放到[0,1]区间。

        公式:新数据=(原数据-极小值)/(极大值-极小值)

        即:x' = \frac{x-x_{mean}}{x_{max}-x_{min}}

2. 标准化(Standardization):

        标准化是通过特征的平均值和标准差,将特征缩放成一个标准的正态分布,缩放后均值为0,方差为1。但即使数据不服从正态分布,也可以用此法。特别适用于数据的最大值和最小值未知,或存在孤立点。

        公式:新数据=(原数据-均值)/(标准差)

        即:x' = \frac{x-x_{mean}}{\sigma }

二、如何选择使用归一化或标准化?

        经过实验,我认为归一化和标准化在大多数情况是通用的,并且效果相同。并且,甚至如果数据量较少(几百几千个),且量纲等级差别不太大(0.0001和100000这种),许多时候其实进行归一化或标准化之后和之前的结果是一样的,可能是像sklearn随机森林等众多包中因为内置的算法里面的优化吧。但是,为了精确得到结果,还是有必要进行的。以下几个方面是归一化和标准化可能不通用的地方:

        1. 需要将数据映射到固定范围的情况。例如在使用梯度下降等优化算法时,需要将特征值缩放到0到1之间,以加快收敛速度。这时候应该选择归一化来处理。

        2. 数据如果有可能存在异常值,标准化可能是较好的选择。因为单个或者少数异常值对于mean和std来说,影响较小。而对于max和min来说,影响就很大了。因此,此时选择标准化是合适的。

三、归一化和标准化的代码

        对于归一化和标准化,使用sklearn库中preprocessing包来进行处理。具体如下:

1. 归一化(Normalization):

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data_train = pd.read_excel("", index_col=0, usecols=range(11))
data_test = pd.read_excel("", index_col=0, usecols=range(11))

ss_ = MinxMaxScaler()
data_ss = ss_datastrength.fit_transform(data_train)

ss.transform(data_test)

2. 标准化(Standardization):

import pandas as pd
from sklearn.preprocessing import StandardScaler

data_train = pd.read_excel("", index_col=0, usecols=range(11))
data_test = pd.read_excel("", index_col=0, usecols=range(11))

ss_ = StandardScaler()
data_ss = ss_datastrength.fit_transform(data_train)

ss.transform(data_test)

        以上代码是我实际使用中摘录的,具体代码不做详细解释,搜搜或gpt都有对每一行有很好解释。

3. 注意事项(重点):

(1)两个代码其实是相似的,只是导用的函数不同,都是经历fit_transform,然后transform。

(2)在进行标准化和归一化时,要将数据集先进行训练集和测试集的划分,然后对训练集fit_transform,对测试集transform。而不能对整个数据集都进行fit_transform,再划分数据集哦。这是因为对于测试集来说相当于未见数据集,应该使用的训练集的归一化或者标准化结果,而不应把他们也当作训练集一起归一化或标准化。

        关注我,以一些小视角发布机器学习心得~

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lrince努力机器学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值