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号