我有一個看起來像這樣的陣列:
[['Team A', 'Team B', 5000]
['Team C', 'Team D', 4000]]
使用此 OneHotEncoder 轉換團隊名稱
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(
transformers=[(
'encoder',
OneHotEncoder(),
[0, 1]
)],
remainder='passthrough'
)
X = np.array(
ct.fit_transform(X)
)
我期望 X 是這樣的:
[[1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 5000]
[0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 4000]]
但是,當我列印時,它看起來更像這樣:
(0, 12) 1.0
(0, 17) 1.0
(0, 28) 5000.0
(1, 5) 1.0
(1, 25) 1.0
(1, 28) 4000.0
在這種情況下我錯過了什么?如果我在 X 變數中包含更多列,我會得到預期的結果:
[['Team A' 'Team B' 2 0 1 0.0 0.0 0 1 2 0.0 1.0 5000]
['Team C' 'Team D' 2 3 0 nan nan 2 1 1 nan nan 4000]]
我不明白在這些情況下有什么區別?當只有其他列發生變化時,為什么我在同一列上得到不同的結果?
uj5u.com熱心網友回復:
無法用您發布的示例資料重現問題;為了
[['Team A', 'Team B', 5000]
['Team C', 'Team D', 4000]]
我X得到
array([[1.0, 0.0, 1.0, 0.0, 5000],
[0.0, 1.0, 0.0, 1.0, 4000]], dtype=object)
然而,最有可能的問題在于sparse=TrueOneHoteEncoder 的默認設定(請參閱檔案) - 您最終得到的表示看起來像一個稀疏的表示。如果您不希望這樣,請將您的OneHotEncoder()定義更改ColumnTransformer為OneHotEncoder(sparse=False)(可能我無法重現它的原因是樣本資料集太小,在這種情況下稀疏表示根本不會起作用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/435299.html
