OneHotEncoder returns 意外结果
OneHotEncoder returns unexpected result
我有一个数组,如下所示:
[['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]]
我不明白在这些情况下有什么不同?为什么当只有其他列发生变化时,我在同一列上得到不同的结果?
无法用您发布的示例数据重现该问题;对于
[['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)
不过,最有可能的问题是 OneHoteEncoder 的默认设置 sparse=True
(参见 docs)——您最终得到的表示看起来像一个稀疏的表示。如果您不想那样,请将 ColumnTransformer
中的 OneHotEncoder()
定义更改为 OneHotEncoder(sparse=False)
(我无法重现它的原因可能是样本数据集太小,并且在这种情况下,稀疏表示根本不会起作用。
我有一个数组,如下所示:
[['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]]
我不明白在这些情况下有什么不同?为什么当只有其他列发生变化时,我在同一列上得到不同的结果?
无法用您发布的示例数据重现该问题;对于
[['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)
不过,最有可能的问题是 OneHoteEncoder 的默认设置 sparse=True
(参见 docs)——您最终得到的表示看起来像一个稀疏的表示。如果您不想那样,请将 ColumnTransformer
中的 OneHotEncoder()
定义更改为 OneHotEncoder(sparse=False)
(我无法重现它的原因可能是样本数据集太小,并且在这种情况下,稀疏表示根本不会起作用。