【问题标题】:Sklearn One Hot Encoding not working correctSklearn One Hot Encoding 无法正常工作
【发布时间】:2021-11-06 10:48:42
【问题描述】:

我有一个这样的数据集:

           Entity  Year  Mean
0      Afghanistan  2016  0.99
1           Africa  2016  0.99
2          Albania  2016  0.99
3          Algeria  2016  0.99
4         Americas  2016  0.99
...            ...   ...   ...
11346        World  1961  0.05
11347        Yemen  1961  0.05
11348   Yugoslavia  1961  0.05
11349       Zambia  1961  0.05
11350     Zimbabwe  1961  0.05

我需要在这个数据集中编码实体列。我在 sklearn 中使用了 OneHotEncoder。这是我的代码:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
x_yam = np.array(ct.fit_transform(x_yam))

但在编码后它给了我这样的东西:

  (0, 0)    1.0
  (0, 229)  2016.0
  (0, 230)  0.99
  (1, 1)    1.0
  (1, 229)  2016.0
  (1, 230)  0.99
  (2, 2)    1.0
  (2, 229)  2016.0
  (2, 230)  0.99
  (3, 3)    1.0
  (3, 229)  2016.0
  (3, 230)  0.99
  (4, 4)    1.0
  (4, 229)  2016.0
  (4, 230)  0.99
  (5, 5)    1.0
  (5, 229)  2016.0
  (5, 230)  0.99
  (6, 6)    1.0
  (6, 229)  2016.0
  (6, 230)  0.99
  (7, 7)    1.0
  (7, 229)  2016.0
  (7, 230)  0.99
  (8, 8)    1.0
  : :

我不能将这些数据用于我的 ML 模型,那么如何正确使用 OneCodeEncoder 对我的数据进行编码?

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    列转换器已选择转换为 scipy 稀疏矩阵,因为 one-hot 编码器确实如此,并且与直通相比,它具有足够多的列。

    您可以通过在ColumnTransformer 中指定sparse_threshold=0.0 或在OneHotEncoder 中指定sparse=False 来强制使用密集数组。或者您可以在转换后将稀疏输出转换为密集;你不能用你尝试过的np.array(...) 来做到这一点,但是使用.todense() 会起作用(参见https://stackoverflow.com/a/55639087/10495893)。

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2021-06-12
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2020-04-09
      • 2014-10-17
      相关资源
      最近更新 更多