【问题标题】:Why do I get extra zeros while OneHotEncoding categorical data?为什么我在 OneHotEncoding 分类数据时会得到额外的零?
【发布时间】:2021-07-17 15:30:37
【问题描述】:

直接来自 Udemy 的机器学习课程,关于编码分类数据的讲座提供了一个 CSV 文件以进行编码。 该文件的内容相当简单:

创建特征矩阵,我可以很容易地得到数据,因为它是值。 但是在使用来自 sklearn(comlumn 转换器)的 OneHotEncoder 时,“国家列”分为 3 个不同的列,给出的值如下所示:

但是,对于相同的数据和相同的代码,讲师会获得一个小数位。 似乎无法理解我是否做错了什么,或者负责此问题的平台版本是否发生了变化。 我怎样才能得到一个小数位而不是多个零。

编码代码:

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

编辑:

第 1 行的预期输出:

[1.0 0.0 0.0 44.0 72000.0]

我得到的输出:

[1.00000000e+00 0.00000000e+00 0.00000000e+00 4.40000000e+01 7.20000000e+04]

【问题讨论】:

  • 嘿,你可以展示一个你想要的例子,你得到了吗?我不确定您是否想要看起来像 [1,0,0] 或其他东西的向量?另外,你想 OneHot 只编码国家列吗?
  • 嗨,@Green 是的,这正是我希望得到的。讲师得到: [1.0 0.0 0.0 44.0 72000.0] 用于包含数据 [France 44 72000] 的列
  • 我回答了之前的事情。这有点不同。请编辑问题,以便清楚。只需给出准确的输入和输出
  • 是的,当然!我用示例编辑了问题
  • 只是显示方式的问题。 1.0 和 1.0000e+00 是完全相同的数据类型和值。

标签: python scikit-learn one-hot-encoding


【解决方案1】:

忘记我写的一切。 如果你想看看会发生什么,只需输入这一行......

np.set_printoptions(suppress=True) #just to print nicely - you may remove it

我完全被这个问题弄糊涂了……

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多