标准差计算公式

总体标准差(Population Standard Deviation)

当数据代表整个总体时:

样本标准差(Sample Standard Deviation)

当数据只是样本时(StandardScaler使用这个):

手动计算示例

数据:[1, 2, 3, 4, 5]

步骤1:计算均值
xˉ=1+2+3+4+55=155=3xˉ=51+2+3+4+5​=515​=3

步骤2:计算每个数据与均值的差

  • 1 - 3 = -2

  • 2 - 3 = -1

  • 3 - 3 = 0

  • 4 - 3 = 1

  • 5 - 3 = 2

步骤3:计算差的平方

  • (-2)² = 4

  • (-1)² = 1

  • 0² = 0

  • 1² = 1

  • 2² = 4

步骤4:求和
4+1+0+1+4=104+1+0+1+4=10

步骤5:除以 (n-1)
105−1=104=2.55−110​=410​=2.5

步骤6:开平方根
s=2.5≈1.581s=2.5​≈1.581

python示例

import numpy as np
from sklearn.preprocessing import StandardScaler

data = np.array([1, 2, 3, 4, 5])

# 方法1:numpy计算(默认使用样本标准差)
std_np = np.std(data, ddof=1)  # ddof=1 表示除以 n-1
print(f"NumPy样本标准差: {std_np}")  # 输出: 1.581

# 方法2:手动计算
mean = np.mean(data)
variance = sum((x - mean) ** 2 for x in data) / (len(data) - 1)
std_manual = np.sqrt(variance)
print(f"手动计算标准差: {std_manual}")  # 输出: 1.581

# 方法3:StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data.reshape(-1, 1))
print(f"StandardScaler标准差: {scaler.scale_[0]}")  # 输出: 1.581

StandardScaler()


StandardScaler().fit_transform() 通过减去均值,除以标准差,把数据变换到均值为0、方差为1的范围内。

import sklearn.preprocessing
from sklearn.preprocessing import StandardScaler

std = StandardScaler()
data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
print(data)

更多推荐