机器学习:数据特征预处理归一化和标准化

举报
彭世瑜 发表于 2021/08/14 00:11:22 2021/08/14
【摘要】 特征预处理 通过特定的统计方法(数学方法)将数据转换成算法要求的数据 数值型数据: -标准缩放 - 归一化 - 标准化 - 缺失值 类别行数据: - one-hot编码 时间型数据: - 时间的切分 123456789 1、归一化 将原始数据映射到一个区间[0,1] 特征同等重要:归一化处理 目的:使得某一个特征对最终结果不对造成更大的影响 缺点:对于异常点处理...

特征预处理

通过特定的统计方法(数学方法)将数据转换成算法要求的数据

数值型数据: -标准缩放 - 归一化 - 标准化 - 缺失值
类别行数据: - one-hot编码
时间型数据: - 时间的切分

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1、归一化

将原始数据映射到一个区间[0,1]
特征同等重要:归一化处理
目的:使得某一个特征对最终结果不对造成更大的影响
缺点:对于异常点处理不好,容易影响最大值最小值,鲁棒性较差(稳定性),只适合精确小数据场景

计算公式

x 1 = x − m i n m a x − m i n x_1 = \frac{x-min}{max - min} x1=maxminxmin

x 2 = x 1 ∗ ( m x − m i ) + m i x_2 = x_1 * (mx - mi) + mi x2=x1(mxmi)+mi

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
"""

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

2、标准化

将原始数据变换到均值为0,标准差为1的范围内
平均值
方差 考量数据稳定性
方差 = 0 所有值都一样
标准差
异常点:由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小

标准差适用场景:
样本足够多且比较稳定,嘈杂大数据

计算公式
s 2 = ∑ i = 1 n ( x i − m e a n ) 2 n s^2 = \frac{\sum_{i=1}^n( x_i - mean)^2}{n} s2=ni=1n(ximean)2

x 1 = x − m e a n s x1 = \frac{x - mean}{s} x1=sxmean
mean 是列数据平均值
s 是标准差
s 2 s^2 s2 方差
n 样本数

代码示例

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]
]
"""


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/86378595

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。