通过特定的统计方法(数学方法)将待处理数据转换为算法要求的数据的这个过程称为特征处理。
数值型数据归一化方案:
对原始数据进行归一化处理后使其映射到指定范围内(通常默认是[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(最大)值;在工程规模方面来考虑时,归一化适用于数据量少的工程。
更多精彩内容请关注公众号:
因篇幅问题不能全部显示,请点此查看更多更全内容