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.]]

浙公網安備 33010602011771號