sklearn之StandardScaler

StandardScaler 是一种常用的数据标准化方法,用于将数据转换为均值为 0,标准差为 1 的标准正态分布。
但是,StandardScaler在计算过程中用的是 “总体标准差”,而不是“样本标准差”

总体标准差

\[\sigma = \sqrt{\frac{\sum_{i=1}^n (x_i-\bar x)^2}{n}} \]

\(x\)为某个样本,\(\bar x\)为总体样本的均值,\(n\) 为总体样本的数量

样本标准差

\[S = \sqrt{\frac{\sum_{i=1}^n (x_i-\bar x)^2}{n-1}} \]

\(x\)为某个抽样样本,\(\bar x\)为抽样样本的均值,\(n\) 为抽样样本的数量

import numpy as np
from sklearn.preprocessing import StandardScaler
data = np.array([[1, 2], [3, 4], [5, 6]])
#1. 使用 StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

# 2. 手动计算(总体标准差,ddof=0)
mean = np.mean(data, axis=0)
std = np.std(data, ddof=0, axis=0)  # 总体标准差
data_std1 = (data - mean) / std

# 3. 手动计算(样本标准差,ddof=1)
mean = np.mean(data, axis=0)
std = np.std(data, ddof=1, axis=0)  # 样本标准差
data_std2 = (data - mean) / std

print('StandardScaler结果:')
print(data_scaled)
print('总体标准差结果:')
print(data_std1)
print('样本标准差结果:')
print(data_std2)

输出结果:

StandardScaler结果:
[[-1.22474487 -1.22474487]
 [ 0.          0.        ]
 [ 1.22474487  1.22474487]]
总体标准差结果:
[[-1.22474487 -1.22474487]
 [ 0.          0.        ]
 [ 1.22474487  1.22474487]]
样本标准差结果:
[[-1. -1.]
 [ 0.  0.]
 [ 1.  1.]]
posted @ 2025-06-25 10:40  华小电  阅读(191)  评论(0)    收藏  举报