为什么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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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