数据预处理:数据标准化

数据标准化是数据分析的关键步骤,包括Z-Score、Min-Max、小数定标和逻辑斯蒂等方法。Z-Score通过计算均值和标准差确保数据均值接近0,方差齐次;Min-Max将数据映射到[0,1]区间;小数定标依据最大绝对值调整小数点位置;逻辑斯蒂利用Sigmoid函数将数据平滑映射到[0,1]。每种方法有其适用场景,需根据数据特性选择合适的标准化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在不少学习算法中,目标函数往往假设其特征均值在 0 附近且方差齐次,若是其中有一个特征的方差远远大于其他特征的方差,那么这个特征将成为影响目标特征的主要因素。模型难以学习到其他特征对目标特征的影响。因此,数据的标准化是数据分析流程中的重要步骤。

Z-score 标准化

简介

Z-score标准化是最常用的标准化方法。该方法通过对数据集中的每个样本进行处理,使得处理后的数据具有固定的均值和标准差
假设特征fff的取值集合为 {f1,f2,…,fnf_1,f_2,…,f_nf1,f2,,fn} ,则特征取值 fif_ifi 经过 Z-score 标准化后的取值 fi′f_i'fi
fi′=fi−μσf_i' = \frac{f_i-\mu}{\sigma}fi=σfiμ
其中 μ=1n∑i=1nfi\mu=\displaystyle \frac{1}{n}\displaystyle \sum^{n}_{i=1}f_iμ=n1i=1nfi 为特征 fff 的平均值,σ=1n∑i=1n(fi−μ)2{\sigma} = \displaystyle\sqrt{\frac{1}{n} \sum^{n}_{i=1}(f_i - \mu)^2}σ=n1i=1n(fiμ)2 为特征 fff 的标准差。
经过Z-score 标准化后,特征的均值落在 0 附近,样本离 0 的距离可解释为其值远离均值的标准差距离。
当数据存在离群值时,为了降低离群值的影响,可以将 Z-score 标准化方法中的标准差换成平均绝对偏差。此时特征 fff 的平均绝对偏差为
s=1n∑i=1n∣fi−μ∣s = \frac{1}{n}\displaystyle \sum^{n}_{i=1}|f_i - \mu|s=n1i=1nfiμ
新的 Z-score 标准化的公式为
fi′=fi−μsf'_i = \frac{f_i - \mu}{s}fi=sfiμ
Z-score 标准化适用于特征的最大值或最小值未知和样本分布非常分散的情况。

代码实现

# z-score标准化
def get_z_score(data):
    return (data - data.mean()) / data.std()

get_z_score(data)

Min-Max 标准化

简介

Min-Max 标准化通过对特征作线性变换,使得转换后特征的取值分布在 [0, 1] 区间内,假设特征fff的取值集合为 {f1,f2,…,fnf_1,f_2,…,f_nf1,f2,,fn} ,则特征取值 fif_ifi 经过 Min-Max 标准化后的取值 fi′f_i'fi
fi′=fi−fminfmax−fminf'_i=\frac{f_i-f_{min}}{f_{max}-f_{min}}fi=fmaxfminfifmin
其中 fminf_{min}fmin 为特征 fff 取值的最小值,fmaxf_{max}fmax 为特征 fff 取值的最大值。
同样如果希望将特征 fff 线性映射到任意区间 [a, b] 上,则 Min-Max 标准化方法为
fi′=b−afmax−fmin(fi−fmin)+af'_i={\frac{b-a}{f_{max}-f_{min}}}(f_i-f_{min}) +afi=fmaxfminba(fifmin)+a
Min-Max 标准化适用于需要将特征取值简单地线性映射到某一区间内的情形,其不足之处在于当数据集中有新数据加入时,特征的最大值或最小值会发生变化,此时需要重新计算新的最大值和最小值,并重新进行标准化操作。由于需要计算最大值和最小值,所以当数据含有离群值时,标准化后的效果较差。

代码实现

# min-max标准化
def get_minmax(data, a=0, b=1):
    return (data - data.min())*(b - a) / (data.max() - data.min()) + a

get_minmax(data)

小数定标标准化

简介

小数定标标准化(decimal scaling)方法通过移动特征取值的小数点位置来进行标准化,使得标准化后特征取值的绝对值总是小于1。小数点移动的位数取决于特征取值的最大绝对值大小。
假设数据中特征 fff 的取值集合为 {f1,f2,…,fnf_1,f_2,…,f_nf1,f2,,fn},特征 fif_ifi 经过小数定标标准化后的取值 fi′f_i'fi
fi′=fi10jf_i'=\frac{f_i}{10^j}fi=10jfi
其中 jjj 是满足max{f1′,f2′,…,fn′f_1',f_2',…,f_n'f1,f2,,fn} <1<1<1的最小整数。例如,某特征的取值范围为[−30735,21872][-30735, 21872][30735,21872].特征取值绝对值的最大值为30735,则 jjj 取值为5.
小数定标标准化方法适用于特征取值比较分散,尤其是特征取值分布在多个数量级的情况,且在确定小数点的移动位数后,易于还原标准化后的取值特征。

代码实现

# 小数定标标准化
def get_float(data):
    return data/10**np.ceil(np.log10(data.abs().max()))

get_float(data)

逻辑斯蒂标准化

简介

逻辑斯蒂(Logistic)标准化利用逻辑斯蒂函数的特性,将特征取值映射到 [0, 1] 区间内,其函数定义形式为
σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}σ(x)=1+ex1
逻辑斯蒂函数将数据从实数域光滑映射到 [0, 1] 区间,可以使用该函数对特征进行标准化处理,假设数据中特征 fff 的取值集合为 {f1,f2,…,fnf_1,f_2,…,f_nf1,f2,,fn},特征 fif_ifi 经过逻辑斯蒂标准化后的取值 fi′f_i'fi
fi′=11+e−fif_i'=\frac{1}{1+e^{-f_i}}fi=1+efi1
逻辑斯蒂标准化方法适用于特征取值分布相对比较集中地分布于 0 两侧的情况。否则,会造成原始特征的分布及取值间关系被改变。

代码实现

def get_log(series):
    return [1 / (1 + math.exp((-1)*i)) for i in series]

get_log(series)

总结

每一种标准化处理方法都会因数据的不同而产生不同的效果,在分析处理中,应以实际的数据情况为参考依据。且标准化处理会改变原始特征的取值,因此在实际操作中需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值