簡體   English   中英

sklearn StandardScaler輸出錯誤的矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM