预处理数据:sklearn StandardScaler 和 scipy whiten 的区别

Pre-processing data: difference between sklearn StandardScaler and scipy whiten

我正在尝试对某些数据应用聚类分析并按照一些教程进行操作,有两个选项可用于规范化数据,函数 StandardScaler 和函数 whiten。

两者有什么区别?

StandardScaler() 通过去除均值并除以标准差来执行 Z 分数归一化。 whiten() 不会删除均值,而只是将实例除以标准差。我个人会选择 StandardScaler(),因为它允许在训练集上使用简单的 fit_transform 并在测试集上使用 transform 以防止 spillage/leakage.

下面是原理证明:

加载包

import numpy as np
from scipy.cluster.vq import whiten
from sklearn.preprocessing import StandardScaler

初始化特征数组

features  = np.array([[1.9, 2.3, 1.7],
                      [1.5, 2.5, 2.2],
                      [0.8, 0.6, 1.7,]])

举个例子,计算第一列的均值和第一列的标准差

meancol1 = np.mean(features[:,0])
std_col1 = np.std(features[:,0])

执行美白功能

whit = whiten(features)

初始化标准缩放器和 fit_transform 特征

scaler = StandardScaler()
std_scaler = scaler.fit_transform(features)

手动计算第一个实例的 z-score

z_score = (features[0,0] - meancol1) / std_col1

第一次手动执行美白功能

w_score = features[0,0]/std_col1

如您所见,手动计算对应各自的函数结果。