Z-Score标准化

一、说明:

Z-Score标准化是数据处理的一种常用方法。通过它能够将不同量级的数据转化为统一量度的Z-Score分值进行比较。提高了数据可比性,削弱了数据解释性。

二、公式:

在这里插入图片描述

1、总体数据的均值(μ)

2、总体数据的标准差(σ)

3、个体的观测值(x)

三、Z-Score的优缺点

优点:
1、简单,容易计算,凭借最简单的数学公式就能够计算出Z-Score并进行比较。

2、Z-Score能够应用于数值型的数据,并且不受数据量级的影响,因为它本身的作用就是消除量级给分析带来的不便。

缺点:
1、首先,估算Z-Score需要总体的平均值与方差,这一值在真实的分析与挖掘中很难得到,大多数情况下是用样本的均值与标准差替代。

2、其次,Z-Score对于数据的分布有一定的要求,正态分布是最有利于Z-Score计算的。

3、最后,Z-Score消除了数据具有的实际意义,A的Z-Score与B的Z-Score与他们各自的分数不再有关系,因此Z-Score的结果只能用于比较数据间的结果,数据的真实意义还需要还原原值。

四、Z-Score标准化python代码实现

import math
def get_average(data):  #求数组平均数
    return sum(data) / len(data)
def get_variance(data):#求数组方差
    average = get_average(data)
    return sum([(x - average) ** 2 for x in data]) / len(data)
def get_standard_deviation(data): #求数组标准差
    variance = get_variance(data)
    return math.sqrt(variance)
def get_z_score(data): #求数组的z-score归一化最后的结果
    avg = get_average(data)
    stan = get_standard_deviation(data)
    scores = [(i-avg)/stan for i in data]
    return scores

五、实际应用Python实现

def get_z_score(df):
    return (df['Duration'] - df['Duration'].mean())/df['Duration'].std()

在这里插入图片描述

### Z-Score标准化的概念 Z-Score标准化是一种常见的数据预处理方法,其核心目标是将原始数据转换到具有零均值和单位标准差的标准正态分布上[^1]。这种方法能够有效消除不同特征之间的量纲差异,使得各变量能够在相同尺度下进行比较和分析。 --- ### Z-Score标准化的计算公式 对于一组数据 \(X\) 中的任意样本 \(x_i\),经过Z-Score标准化后的值可以通过以下公式计算: \[ z_i = \frac{x_i - \mu}{\sigma} \] 其中: - \(x_i\) 表示第 \(i\) 个样本; - \(\mu\) 是该组数据的平均值(Mean); - \(\sigma\) 是该组数据的标准差(Standard Deviation)。 此公式的目的是将每个样本减去整体均值后再除以标准差,从而得到新的数值范围位于 [-3, 3] 的近似标准正态分布数据[^2]。 --- ### 数据分析中的应用 在数据分析领域,Z-Score标准化广泛应用于以下几个方面: 1. **模型输入准备**:许多机器学习算法假设输入数据服从标准正态分布,因此需要先对其进行Z-Score标准化。 2. **异常检测**:通过观察标准化后偏离均值较远的数据点(通常定义为 |z| > 3),可以快速识别潜在的异常值[^3]。 3. **多维数据可视化**:当多个维度之间存在显著不同的量级时,使用Z-Score可以使它们在同一坐标系中更直观地展示出来。 --- ### Python实现方式 以下是两种常用的Python实现Z-Score标准化的方法: #### 方法一:利用`sklearn.preprocessing.StandardScaler` ```python from sklearn.preprocessing import StandardScaler import pandas as pd # 假设df是一个DataFrame结构的数据集 data = [[10], [8], [13], [9]] df = pd.DataFrame(data) scaler = StandardScaler() scaled_data = scaler.fit_transform(df) print(scaled_data) ``` 上述代码片段展示了如何借助于Scikit-Learn库完成自动化流程——创建实例、拟合训练以及最终转化成所需形式的结果输出过程。 #### 方法二:手动编写函数 如果不想依赖第三方库,则也可以自己动手构建相应功能模块: ```python def manual_z_score(x): mean_x = sum(x)/len(x) # Compute Mean μ std_dev = (sum((xi-mean_x)**2 for xi in x)/(len(x)-1))**(1/2) # Compute StdDev σ return [(xi - mean_x)/std_dev for xi in x] example_list = [7, 5, 6, 4] result = manual_z_score(example_list) print(result) ``` 这段脚本首先分别求出了列表元素总和及其长度之商作为均值估计;接着采用Bessel's correction调整估算方差进而获取无偏版本的标准偏差值;最后逐项代入前述提到过的通用表达式得出答案。 --- ### Excel实现方式 除了编程手段外,在日常办公环境中经常使用的Microsoft Office套件之一—Excel同样支持便捷的操作步骤达成同样的效果: 1. 首先选定待处理区域A列存放原始观测序列; 2. 利用内置统计工具栏里的“AVERAGE(A:A)”命令取得总体平均水平存放到某个空白单元格比如C1处; 3. 同理运用“STDEV.S(A:A)"或者"STDEVP(A:A)"指令获得样本或群体版别的离散程度指标放置D1位置; 4. 接下来针对每一个具体位置填写类似下面这样的动态链接关系:“=(A1-$C$1)/$D$1”,拖拽填充柄直至覆盖整个区间即可。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值