为什么Python的’StandardScaler’和Matlab的’zscore’标准化方法不同?

为什么Python中sklearn.preprocessing.StandardScaler的标准化方法与Matlab中的zscore不同?

Python中使用sklearn.preprocessing的示例:

>>> from sklearn.preprocessing import StandardScaler>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]>>> scaler = StandardScaler()>>> scaler.fit(data)>>> print(scaler.mean_)    [ 0.5  0.5]>>> print(scaler.var_)    [0.25 0.25]>>> print(scaler.transform(data))[[-1. -1.][-1. -1.][ 1.  1.][ 1.  1.]]

Matlab中使用zscore函数的相同示例:

>> data = [[0, 0]; [0, 0]; [1, 1]; [1, 1]];>> [Sd_data,mean,stdev] = zscore(data)    Sd_data =   -0.8660   -0.8660   -0.8660   -0.8660    0.8660    0.8660    0.8660    0.8660    mean =    0.5000    0.5000    stdev =    0.5774    0.5774    

回答:

看起来问题出在自由度(ddof – 与标准差估计相关的校正因子),它在StandardScaler中默认值为0。

作为替代方案,scipy.stats中的zscore函数允许你在缩放时控制这个参数:

from scipy.stats import zscorezscore(data, ddof=1)array([[-0.8660254, -0.8660254],       [-0.8660254, -0.8660254],       [ 0.8660254,  0.8660254],       [ 0.8660254,  0.8660254]])

这样你得到的结果与Matlab函数相同。当你调用zscore并设置ddof=0时,你会得到与StandardScaler相同的结果。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注