pandas get_dummies 如何记住哪个值变成了哪个新类别? [复制]

Posted

技术标签:

【中文标题】pandas get_dummies 如何记住哪个值变成了哪个新类别? [复制]【英文标题】:pandas get_dummies how to remember which value become which new category? [duplicate] 【发布时间】:2018-02-14 19:12:51 【问题描述】:

使用 get_dummies 方法一次对多个分类变量进行一次热编码似乎很容易,但是如何记住哪个是哪个,以便我的测试数据与我的训练数据具有相同的特征?例如:

我的训练数据集有一个分类特征:

   X
   cat
   dog
   lion
   lion

在get_dummies之后,我得到了这样的东西:

   X_1   X_2   X_3
    1     0     0
    0     1     0
    0     0     1
    0     0     1

训练模型后,我准备测试我的神奇模型,这里是测试数据:

   X
   cat
   cat
   lion

如果我应用 pd.get_dummies 方法,我会得到这样的结果:

   X_1      X_2
   1       0
   1       0
   0       1

这将与我的训练数据特征不一致,我根本无法将我的模型应用于测试数据。

有什么建议可以让我得到以下类似的吗?

   X_1   X_2   X_3
    1     0     0
    1     0     0
    0     0     1

如何获得适合和转换的功能?同样,我有超过 50 个分类特征,我不能将 LabelEncoder 和 One_Hot_Encoder 一个一个地应用到它们。

有什么建议吗?谢谢。

【问题讨论】:

短版:预先定义类别并将 dtype 转换为类别。现在,当您调用 get_dummies 时,pandas 将为所有类别生成列,即使它们不存在于该特定数据集中。 哦哇...有一个骗子...而且解决方案很棒 @ayhan,如果有少数特征,你提到的姿势中的答案非常方便,如果有超过 50 个类别特征怎么办......还有其他选择吗? 你可以使用LabelBinarizer 另外,您需要考虑的另一件事是您所描述的相反情况?其中测试数据的分类变量比火车多。 【参考方案1】:

我对所有数据使用 get_dummies,然后将其分为训练和测试。

【讨论】:

有时这不是一个可行的选择......然后呢? 不,在现实世界中不起作用

以上是关于pandas get_dummies 如何记住哪个值变成了哪个新类别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pandas get_dummies 函数应用于有效数据集?

将“pandas.get_dummies”转换到新数据的简单方法?

pandas.get_dummies

特征提取pd.get_dummies() 详解(One-Hot Encoding)

python get_dummies pandas with drop_first

Pandas.get_dummies 返回两列(_Y 和 _N)而不是一列