3.9 标准化,让运营数据落入相同的范围

参考:《Python数据分析和运营化处理》

数据标准化是一种数据预处理操作,通过处理不同规模和量纲的数据,使其缩放到相同的数据区间,例如[0, 1],或[-1, 1],减少了因为数据规模和分布差异的不同造成对模型的影响。避免“大数吃小数”现象。

标准化方法 数学公式 优点 缺点 区间
Z-Score \(x^' = (x-mean)/std\) 默认标准化方法,生成数据以0为均值,方差为1的正态分布。 一种中心化方法,会改变原有数据的分布结构,不适合用于对稀疏数据做处理。 [0,1]
Max-Min \(x^'=(x-min)/(max-min)\) 应用广泛,对数据线性变换,能较好地保持原有数据结构。 可能出现分母为0,导致计算溢出。 [0,1]
MaxAbs $x^'=x/ max $ 不破坏原有数据分布结构,可以用于稀疏数据、稀疏的CSR或CSC
RobustScaler - 针对离群点做标准化处理,对数据中心华和数据的缩放健壮性有更强的参数控制能力。能最大限度地保留数据集中的异常。 - -

稀疏数据:数据集会存在稀疏性特征,表现为标准差小,并有很多元素的值为0。常用来做协同过滤。对稀疏数据不能采用中心化的方式,否则会破坏稀疏数据的结构。

协同过滤:系统利用用户喜好、共同经验群体来推荐用户感兴趣的信息,而用户通过评分、收藏等合作机制和系统协同达到过滤的目的。

相关python程序:


# 3.9 标准化,让运营数据落入相同的区间

import numpy as np

from sklearn import preprocessing

import matplotlib.pyplot as plt



data = np.loadtxt('data6.txt', delimiter='\t') # 读取数据



# 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标准化处理



# 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标准化标准化处理



# 展示多网格结果

data_list = [data, data_scale_1, data_scale_2, data_scale_3, data_scale_4] # 创建数据集列表

scalar_list = [15, 10, 15, 10, 15, 10] # 创建点尺寸列表

color_list = ['black', 'green', 'blue', 'yellow', 'red'] # 创建颜色列表

merker_list = ['o', ',', '+', 's', 'p'] # 创建样式列表

title_list = ['source data', 'zscore_scaler', 'minmax_scaler', 'maxabsscaler_scaler', 'robustscalerr_scaler'] # 创建标题列表

for i, data_single in enumerate(data_list): # 循环得到索引和每个数值

    plt.subplot(2, 3, i + 1) # 确定子网格

    plt.scatter(data_single[:, :-1], data_single[:, -1], s=scalar_list[i], marker=merker_list[i],

                c=color_list[i]) # 子网格展示散点图

    plt.title(title_list[i]) # 设置子网格标题

plt.suptitle("raw data and standardized data") # 设置总标题

plt.show() # 展示图形

posted @ 2018-10-23 21:56  hugechuanqi  阅读(446)  评论(0编辑  收藏  举报