数据标准化学习笔记

数据标准化

为什么要标准化

  • 分类树算法要求离散型数据
  • 回归树算法要求近似服从正态分
  • 聚类算法要求数据集属性无纲量
  • 观测记录之间的相似度将会受到纲量大的属性的影响

常用的标准化方法

给定一维随机变量f,和一个容量为n的数据样本 S,基于这种假设,介绍以下几种常用的标准化方法:

  • Z-score标准化
  • Min-Max标准化
  • Logistic标准化
  • 正态性检验
  • box-cox变换

Z-score标准化

该方法通过对数据集中的每一个样本进行处理,使得处理后的数据就有固定均值和标准差。

Z-score标准化:是将f减去总体均值μ,然后除以标准差σ的过程。

从Z-score的数学表达式可以得出:

Z-score代表的是变量f相对于均值μ的相对距离;而这个距离的度量可以用标准差σ表示。
f i ′ = ( f i − μ ) σ f'_i=\frac{(f_i-μ)}{σ} fi=σfiμ

μ = x ‾ = 1 n ∑ i = 1 n f i μ=\overline{x}=\frac{1}{n}\sum_{i=1}^{n}f_i μ=x=n1i=1nfi

σ = 1 n ∑ i = 1 n ( f i − μ ) 2 \sigma=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(f_i-\mu)^2} σ=n1i=1n(fiμ)2

举例说明,对dataper_capita_income字段进行Z-score标准化。

import numpy as np
import pandas as pd
data = pd.read_csv('D:/data.csv')
from sklearn import preprocessing

print("标准化之前的数据: \n" + str(data[:,1]) + "\n")
#进行Z-score标准化
scaled_income = preprocessing.scale(data[:,1])
print("标准化后前的数据: \n" + str(scaled_income) + "\n")

标准化之前的数据:

[ 392.00 110.00 44.00 158.00 81.00 374.00 187.00 993.00 1723.00 287.00 970.00 885.00 200.00 575.00 688.00 48.00 572.00 239.00 244.00 472.00 134.00 633.00 295.00 906.00 1045.00 775.00 901.00 910.00 556.00]

标准化后前的数据:

[-0.35 -1.08 -1.24 -0.95 -1.15 -0.40 -0.88 1.18 3.05 -0.62 1.12 0.90 -0.85 0.11 0.40 -1.23 0.10 -0.75 -0.73 -0.15 -1.01 0.26 -0.60 0.96 1.31 0.62 0.95 0.97 0.06]

注:标准化后的数据均值为0,方差为1。

Z-score标准化步骤

从f的取值中减去均值,消除f在具体数值上的差异

与标准差相除,进一步消除量纲带来的影响

属性的取值非常系数,存在大量的零值

Z-score标准化会把零点变为非零点,这回改变原始数据的信息

在Z-score标准话之前,考察数据的分布是必要的

Min-Max标准化

  • 将f映射到[0,1]之间,达到标准化的目的
  • Min-Max标准话也是对f的原取值区间线性变换,得到新区间的过程
  • fi标准化后的取值为:

f i ′ = f i − f m i n f m a x − f m i n f'_i=\frac{f_i-f_{min}}{f_{max}-f_{min}} fi=fmaxfminfifmin

  • 其中fmin、fmax分别为f的最小值和最大值

同样地,我们使用sklearn中的MinMaxScaler,对dataper_capita_income字段进行Min-Max标准化。

#transfrom = np.array(data['per_capita_income'])
# 将数据转化为数组格式
min_max_scaler = preprocessing.MinMaxScaler()
#MinMaxScaler()的参数feature_range可以指定数据映射的目标区间,默认的区间为[0, 1]。上述代码实现把数据映射到 [0,1]区间中。
minmax_data=min_max_scaler.fit_transform(data[:,1].reshape(-1, 1))
#同样,这个函数接收的数据也必须是一个二维的,所以这里需要我们多进行一次reshape
print(minmax_data.reshape(1,-1))

输出数据为:

[[ 0.21  0.04  0.00  0.07  0.02  0.20  0.09  0.57  1.00  0.14  0.55  0.50
   0.09  0.32  0.38  0.00  0.31  0.12  0.12  0.25  0.05  0.35  0.15  0.51
   0.60  0.44  0.51  0.52  0.30]]

Min-Max标准化总结

Min_Max标准化常见于基于距离的分析算法,可以消除量纲,数量级的影响

Min-Max标准化在数据转换的过程中使用了数据集的最值

当数据集的观测记录发生变动(增加或者删除个别记录)时,我们不得不对数据集重新进行Min-Max标准化

如果数据集中存在异常值,这可能会导致数据集的最值严重偏离实际的情形。

Min-Max标准化对异常值敏感。

Logistic标准化

  • Logistic标准化是借助Logistic函数来对 x 进行非线性映射
  • 经过变换后的f取值区间为:[0,1]
  • Logistic函数的数学表达式如下图所示,Logistic曲线呈“s”型

png
σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1

Logistic标准化的特点:

Logistic标准化对数据集的分布有一定的要求,它假定数据取值集中分布在 0值左右,

如果字段的取值均匀分散,或者说远离零点,那么经过Logistic标准化后的数据将会集中在0 ,1两个点附近。

这样做会改变数据集的原始分布特征。

正态性检验

  • 许多数据科学分析模型(如线性模型,高斯混合模型)的假设要求:输入数据副总或是近似服从正态分布
  • 正态分布检验方法的零假设为样本数据的分布服从正态分布
  • 根据计算得出p值大小,来判断时候拒绝零假设
假设内容
H0样本服从正态分布
H1样本不服从正态分布

具体方式

给定一个显著性水平α

p值大于显著性水平,表明无法拒绝零假设,但这并不代表它绝对正确

反之,则表明零假设一定错误,即样本一定不服从正态分布

正 态 性 判 断 = { 无 法 拒 绝 H 0 , α < p H 1 成 立 , α > p 正态性判断=\begin{cases} 无法拒绝H_0,\alpha<p \\ H_1成立,\alpha>p \end{cases} ={H0,α<pH1α>p

正态分布的偏度和 峰度为零,统计量偏度和 峰度可以作为判断正态分布的参考

Scipy库中的函数skewtest和kurtosis可以对样本进行偏度和峰度检验

import numpy as np
import scipy.stats as stats
no.random.seed(5000)
#设置种子
num_norm=np.random.normal(0,1,5000)
print("样本分布的偏度检测结果:"+str(stats.skewtest(num_norm)))
print("样本分布的峰度检测结果:"+str(stats.kurtosistest(num_norm)))

仅根据偏度和峰度,在给定置信度水平你的情况下,我们无法确切知道样本数据是否服从正态分布

Scipy库基于这两个标准化统计量,提出一种综合性的正态分布检验方法:

计算 p ˉ s k e w 2 + p ˉ k u r t o s i s 2 \bar{p}^2_{skew}+\bar{p}^2_{kurtosis} pˉskew2+pˉkurtosis2去判断断样本是否服从正态分布

stats.normaltest(num_norm)

假设置信度水平 α \alpha α=0.05,函数返回的p值大于给定的显著性水平,则无法拒绝零假设

Box-Cox变换

  • 如果数据通过正态性检验,那么正态分布的特性能为后续的分析带来便捷
  • 倘若数据不服从正态分布,则需要随数据进行变换,即Box-Cox变换
  • 称为幂变换,在不损失数据信息的前提下,解决线性回归中目标变量不满足正态分布的问题
  • 通过对目标变量进行Box-Cox变换,数据集可以进行线性回归模型的建模操作

Box-Cox变换的数学表达式为:
f ( x ) = { x λ − 1 λ , λ ≠ 0 l o g x , λ = 0 f(x)=\begin{cases} \frac{x^{\lambda}-1}{\lambda},\lambda\neq0 \\ logx,\lambda=0 \end{cases} f(x)={λxλ1,λ=0logx,λ=0
其中f(x)为经过Box-Cox变换后得到的新变量,x为原始因变量, λ \lambda λ为变换参数

从表达式中可以知道,当取参数值为零,Box-Cox退化为对数变换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值