目录
参考资料:《Python数据分析与数据化运营》宋天龙
数据标准化是一个常用的数据预处理操作,目的是将不同规模和量纲的数据经过处理,缩放到相同的数据区间,以减少规模、单位、分布差异等对模型的影响。除了应用在模型中,标准化后的数据还具有直接计算并生成复合指标的意义,是加权指标的必要步骤。
实现中心化和正态分布的Z-Score
Z-Score标准化是基于原始数据的均值和标准差进行的标准化,假设原转换的数据为x,新数据为x',那么x'=(x-mean)/std,其中mean和std为x所在列的均值和标准差。
这种标准化方法适合大多数类型的数据,也是很多工具的默认标准化方法。标准化之后的数据是以0为均值、方差为1的正态分布。但是Z-Score方法是一种中心化方法,会改变原有数据的分布结构,不适合用于对稀疏数据做处理。(稀疏数据是指绝大部分的数据都是0,仅有少部分数据为1)
实现归一化的Max-Min
Max-Min标准化方法是对原始数据进行线性变换,假设原转换的数据为x,新数据为x',那么x'=(x-min)/(max-min),其中min和max为x所在列的最小值和最大值。
这种标准化方法的适应性非常广泛,得到的数据会完全落入[0,1]区间内,这种方法既能实现数据的归一化,又能较好的保持原有数据结构。
用于稀疏数据的MaxAbs
最大值绝对值标准化(MaxAbs)根据最大值的绝对值进行标准化,假设原转换的数据为x,新数据为x',那么x'=x/|max|,其中max为x所在列的最大值。
MaxAbs方法跟Max-Min用法类似,但得到的数据会完全落入[-1,1]区间内。MaxAbs也具有不破坏原有数据分布结构的特点,因此也可以用于稀疏数据,或者稀疏的CSR或CSC矩阵。
说明: CSR(Compressed Sparse Row,行压缩)和CSC(Compressed Sparse Column,列压缩)是稀疏矩阵的两种存储格式,这两种稀疏矩阵在scipy.sparse包中应用广泛。除了这两种格式之外,用于存储稀疏矩阵的格式还有COO、CSR、DIA、ELL、HYB等。
针对离群点的RobustScaler
在某些场景下,假如数据集中有离群点,我们可以使用Z-Score进行标准化,但是标准化后的数据可能并不理想,因为异常点的特征往往在标准化之后便容易失去离群特征。此时,可以使用RobustScaler针对离群点做标准化处理,该方法对数据中心化和数据的缩放鲁棒性有更强的参数控制。
#导入库
from sklearn import preprocessing
# Z-Score标准化
zscore_scaler = preprocessing.StandardScaler() # 建立StandardScaler对象
data_scale_1 = zscore_scaler.fit_transform(data) # StandardScaler标准化处理
# Max-Min标准化
minmax_scaler = preprocessing.MinMaxScaler() # 建立MinMaxScaler模型对象
data_scale_2 = minmax_scaler.fit_transform(data) # MinMaxScaler标准化处理
#还可以设置preprocessing.MinMaxScaler(feature_range=(min,max))来自定义标准化后的数据区间。
# MaxAbsScaler标准化
maxabsscaler_scaler = preprocessing.MaxAbsScaler() # 建立MaxAbsScaler对象
data_scale_3 = maxabsscaler_scaler.fit_transform(data) # MaxAbsScaler标准化处理
# RobustScaler标准化
robustscalerr_scaler = preprocessing.RobustScaler() # 建立RobustScaler标准化对象
data_scale_4 = robustscalerr_scaler.fit_transform(data) # RobustScaler标准化标准化处理