特征预处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
数值型数据: -标准缩放 - 归一化 - 标准化 - 缺失值 类别行数据: - one-hot编码 时间型数据: - 时间的切分
1、归一化
将原始数据映射到一个区间[0,1]
特征同等重要:归一化处理
目的:使得某一个特征对最终结果不对造成更大的影响
缺点:对于异常点处理不好,容易影响最大值最小值,鲁棒性较差(稳定性),只适合精确小数据场景
min为列最小值
max为列最大值
x2 为最终结果
mx ,mi 为指定区间默认[0, 1]
代码示例
# -*- coding: utf-8 -*- from sklearn.preprocessing import MinMaxScaler # 归一化处理,将数据映射到指定区间 data = [ [90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46] ] min_max = MinMaxScaler(feature_range=(0, 1)) result = min_max.fit_transform(data) print(result) """ [ [1. 0. 0. 0. ] [0. 1. 1. 0.83333333] [0.5 0.5 0.6 1. ] ] 计算示例,第一列 90 x1 = (x−min)/(max-min) = (90 - 60)/(90 - 60) = 1 x2 = x1 * (mx - mi)+ mi = 1 * (1 - 0) + 0 = 1 60 x1 = (x−min)/(max-min) = (60 - 60)/(90 - 60) = 0 x2 = x1 * (mx - mi)+ mi = 0 * (1 - 0) + 0 = 0 75 x1 = (x−min)/(max-min) = (75 - 60)/(90 - 60) = 0.5 x2 = x1 * (mx - mi)+ mi = 0.5 * (1 - 0) + 0 = 0.5 """
2、标准化
将原始数据变换到均值为0,标准差为1的范围内
平均值
方差 考量数据稳定性
方差 = 0 所有值都一样
标准差
异常点:由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小
标准差适用场景:
样本足够多且比较稳定,嘈杂大数据
代码示例
from sklearn.preprocessing import StandardScaler # 标准化处理,将数据映射到均值为0,标准差为1 data = [ [1.0, -1.0, 3.0], [2.0, 4.0, 2.0], [4.0, 6.0, -1.0] ] std = StandardScaler() result = std.fit_transform(data) print(result) """ [ [-1.06904497 -1.35873244 0.98058068] [-0.26726124 0.33968311 0.39223227] [ 1.33630621 1.01904933 -1.37281295] ] """