搜索
您的当前位置:首页正文

数据特征处理之数值型数据(归一化)

来源:吉趣旅游网


什么是特征处理?

 

通过特定的统计方法(数学方法)将待处理数据转换为算法要求的数据的这个过程称为特征处理。

数值型数据归一化方案:


归一化的特点

对原始数据进行归一化处理后使其映射到指定范围内(通常默认是[0,1]之间)

降低数据附带的量纲影响,使不同的特征具有相同的尺度(Scale),进而具有可比性(公平性)

【注】 归一化也被称为最大最小标准化(min-max Normalization)、调节比例(Rescaling)

 

我们常用的归一化特征处理的统计(数学)方法便是线性转换的方式,

上述公式中, xmin 表示源数据中特征的最小值,xmax 表示特征的最大值,x则表示源数据中的具体值

我们平时所见的归一化都是将数据映射到[0,1]之间,若是将数据映射到自定义范围内呢?显然上述公式不具有通用性。具备通用性的其实是下面这个

其中,a表示将数据缩放到指定区间内的上限,b表示将数据缩放到指定区间的下线。归一化整体流程如下图

[注] 上述公式的效果作用于每一列(特征)


上述缩放结果是借助机器学习中的sklearn模块来完成的,完整的代码如下

默认缩放到[0, 1]时

# -*- coding:utf-8 -*-

# @Author: 数据与编程之美
# @File: min_max_normalization.py
# @Time: 2020/12/07 23:15

from sklearn.preprocessing import MinMaxScaler


def min_max_handle():   # 归一化

    mms = MinMaxScaler()
    data = mms.fit_transform([[425, 42, 0.16],
                              [544, 66, 1.28],
                              [509, 75, 0.87],
                              [496, 60, 0.99],
                              [580, 23, 1.15]])

    print(data)


if __name__ == "__main__":
    min_max_handle()

缩放到任意区间内时,只需加入参数并指定区间范围既可,如指定到[5, 8]之间时

 

# -*- coding:utf-8 -*-

# @Author: 数据与编程之美
# @File: min_max_normalization.py
# @Time: 2020/12/07 23:15

from sklearn.preprocessing import MinMaxScaler


def min_max_handle():   # 归一化

    mms = MinMaxScaler(feature_range=(5, 8))
    data = mms.fit_transform([[425, 42, 0.16],
                              [544, 66, 1.28],
                              [509, 75, 0.87],
                              [496, 60, 0.99],
                              [580, 23, 1.15]])

    print(data)


if __name__ == "__main__":
    min_max_handle()

上述内容便是数据特征处理中的数据归一化理论、操作流程。然而归一化只是众多特征处理方案中的一种手段,其最终服务的成熟算法还是有局限性的。


归一化的不足之处

对于常见的归一化处理手段(基于线性转换的方式) ,丛其理论表达式可以看出,归一化后的结果与xmin (最小)、xmax(最大)值相关,也就是由极值决定。当增加样本量数据时,有可能导致某特征的极值发生变化,从而导致归一化结果不稳定(不具备鲁棒性),实际使用时可以使用经验常量来代替xmin (最小)、xmax(最大)值;在工程规模方面来考虑时,归一化适用于数据量少的工程。


更多精彩内容请关注公众号:

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top