[英]sklearn StandardScaler outputting wrong matrix
[10 15 18 11]
[15 17 24 16]
[13 13 20 14]
[12 20 10 25]
[12 11 14 11]
我有這些數據,我正在嘗試使用 sklearn.preprocessing.StandardScaler 對其進行縮放:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled=scaler.fit_transform(df)
scaled_df = pd.DataFrame(scaled, columns = df.columns)
scaled_df.head()
這輸出:
array([[-1.32680694, -0.06401844, 0.16552118, -0.85248268],
[ 1.73505523, 0.57616596, 1.40693001, 0.11624764],
[ 0.20412415, -0.70420284, 0.57932412, -0.27124449],
[-0.30618622, 1.53644256, -1.4896906 , 1.85996222],
[-0.30618622, -1.34438724, -0.66208471, -0.85248268]])
我知道這是錯誤的,因為 cov 矩陣顯示方差為 1.25,而根據定義它應該為 1。此外,原始數據正確保存在“df”變量中。 如果我手動標准化數據,我會得到正確的結果,所以我真的不知道縮放器 function 發生了什么。
您很可能正在使用pandas 方法 std ,其中自由度默認為StandardScaler
調用numpy.std ,它使用自由度為 0。如果您設置ddof = 0
它應該可以工作。
為了顯示:
data = [[10 ,15 , 18 , 11],[15, 17, 24 , 16],[13, 13 , 20 , 14],
[12,20,10 ,25],[12, 11 , 14 , 11]]
df = pd.DataFrame(data)
scaler = StandardScaler()
scaled=scaler.fit_transform(df)
scaled_df = pd.DataFrame(scaled, columns = df.columns)
scaled_df
0 1 2 3
0 -1.477098 -0.064018 0.165521 -0.852483
1 1.600189 0.576166 1.406930 0.116248
2 0.369274 -0.704203 0.579324 -0.271244
3 -0.246183 1.536443 -1.489691 1.859962
4 -0.246183 -1.344387 -0.662085 -0.852483
scaled_df.std()
0 1.118034
1 1.118034
2 1.118034
3 1.118034
scaled_df.std(ddof=0)
0 1.0
1 1.0
2 1.0
3 1.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.