为什么 Python 的 'StandardScaler' 和 Matlab 的 'zscore' 之间的标准化不同?
Why does the standardization differ between Python's 'StandardScaler' and Matlab's '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 zscore
zscore(data, ddof=1)
array([[-0.8660254, -0.8660254],
[-0.8660254, -0.8660254],
[ 0.8660254, 0.8660254],
[ 0.8660254, 0.8660254]])
您最终得到与 matlab 函数相同的输出。当您使用 ddof=0
调用 zscore
时,您会得到与 StandardScaler
.
相同的输出
为什么 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 zscore
zscore(data, ddof=1)
array([[-0.8660254, -0.8660254],
[-0.8660254, -0.8660254],
[ 0.8660254, 0.8660254],
[ 0.8660254, 0.8660254]])
您最终得到与 matlab 函数相同的输出。当您使用 ddof=0
调用 zscore
时,您会得到与 StandardScaler
.