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