您好,欢迎来到99网。
搜索
您的当前位置:首页python数据预处理之数据标准化的几种处理方式

python数据预处理之数据标准化的几种处理方式

来源:99网
python数据预处理之数据标准化的⼏种处理⽅式

何为标准化:

在数据分析之前,我们通常需要先将数据标准化(normalization),利⽤标准化后的数据进⾏数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和⽆量纲化处理两个⽅⾯。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作⽤⼒的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评⽅案的作⽤⼒同趋化,再加总才能得出正确结果。数据⽆量纲化处理主要解决数据的可⽐性。⼏种标准化⽅法:归⼀化Max-Min

min-max标准化⽅法是对原始数据进⾏线性变换。设minA和maxA分别为属性A的最⼩值和最⼤值,将A的⼀个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为:新数据=(原数据-最⼩值)/(最⼤值-最⼩值)

这种⽅法能使数据归⼀化到⼀个区域内,同时不改变原来的数据结构。实现中⼼化Z-Score

这种⽅法基于原始数据的均值(mean)和标准差(standard deviation)进⾏数据的标准化。将A的原始值x使⽤z-score标准化到x'。

z-score标准化⽅法适⽤于属性A的最⼤值和最⼩值未知的情况,或有超出取值范围的离群数据的情况。新数据=(原数据-均值)/标准差

这种⽅法适合⼤多数类型数据,也是很多⼯具的默认标准化⽅法。标准化之后的数据是以0为均值,⽅差为以的正太分布。但是Z-Score⽅法是⼀种中⼼化⽅法,会改变原有数据的分布结构,不适合⽤于对稀疏数据做处理。

很多时候数据集会存在稀疏特征,表现为标准差⼩,很多元素值为0,最常见的稀疏数据集是⽤来做协同过滤的数据集,绝⼤部分数据都是0。对稀疏数据做标准化,不能采⽤中⼼化的⽅式,否则会破坏稀疏数据的结构。⽤于稀疏数据的MaxAbs

最⼤值绝对值标准化(MaxAbs)即根据最⼤值的绝对值进⾏标准化,假设原转换的数据为x,新数据为x',那么x'=x/|max|,其中max为x锁在列的最⼤值。

该⽅法的数据区间为[-1, 1],也不破坏原数据结构的特点,因此也可以⽤于稀疏数据,⼀些稀疏矩阵。针对离群点的RobustScaler

有些时候,数据集中存在离群点,⽤Z-Score进⾏标准化,但是结果不理想,因为离群点在标准化后丧失了利群特性。RobustScaler针对离群点做标准化处理,该⽅法对数据中⼼化的数据的缩放健壮性有更强的参数控制能⼒。python实现

import numpy as npimport pandas as pd

from sklearn import preprocessingimport matplotlib.pyplot as plt

from sklearn.datasets import make_moonsimport matplotlib.pyplot as plt%matplotlib inline

# 导⼊数据

data = make_moons(n_samples=200, noise=10)[0]#Z-Score标准化

#建⽴StandardScaler对象

zscore = preprocessing.StandardScaler()# 标准化处理

data_zs = zscore.fit_transform(data)#Max-Min标准化

#建⽴MinMaxScaler对象

minmax = preprocessing.MinMaxScaler()

# 标准化处理

data_minmax = minmax.fit_transform(data)#MaxAbs标准化

#建⽴MinMaxScaler对象

maxabs = preprocessing.MaxAbsScaler()# 标准化处理

data_maxabs = maxabs.fit_transform(data)#RobustScaler标准化#建⽴RobustScaler对象

robust = preprocessing.RobustScaler()# 标准化处理

data_rob = robust.fit_transform(data)

# 可视化数据展⽰# 建⽴数据集列表

data_list = [data, data_zs, data_minmax, data_maxabs, data_rob]# 创建颜⾊列表

color_list = ['blue', 'red', 'green', 'black', 'pink']# 创建标题样式

title_list = ['source data', 'zscore', 'minmax', 'maxabs', 'robust']# 设置画幅

plt.figure(figsize=(9, 6))# 循环数据集和索引

for i, dt in enumerate(data_list): # ⼦⽹格

plt.subplot(2, 3, i+1) # 数据画散点图

plt.scatter(dt[:, 0], dt[:, 1], c=color_list[i]) # 设置标题

plt.title(title_list[i])# 图⽚储存

plt.savefig('xx.png')# 图⽚展⽰plt.show()

参考:

《》 宋天龙

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

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

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务