我的问题设置如下:Python 3.7、Pandas 版本 1.0.3 和 sklearn 版本 0.22.1。我按照惯例应用一个StandardScaler(到浮点矩阵的每一列)。但是,我得到的列没有标准偏差 = 1,而它们的平均值是(大约)0。
我不确定这里出了什么问题,我检查了是否scaler
混淆并标准化了行,但似乎并非如此。
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
np.random.seed(1)
row_size = 5
n_obs = 100
X = pd.DataFrame(np.random.randint(0,1000,n_obs).reshape((row_size,int(n_obs/row_size)))
scaler = StandardScaler()
scaler.fit(X)
X_out = scaler.transform(X)
X_out = pd.DataFrame(X_out)
所有列都有标准偏差1.1180...
,而不是 1。
X_out[0].mean()
>>Out[2]: 4.4408920985006264e-17
X_out[0].std()
>>Out[3]: 1.1180339887498947
编辑:
我已经意识到,当我row_size
在上面增加时,例如从 5 到 10 和 100,列的标准偏差接近 1。所以这可能与方差估计器的偏差随着 n 增加而变小有关(?)。然而,我可以通过手动实现获得单位方差没有意义,(col[i]- col[i].mean() )/ col[i].std()
但 StandardScaler 却很挣扎......