【问题标题】:Pandas: Handle Unseen Data In TestPandas:在测试中处理看不见的数据
【发布时间】:2018-04-28 04:59:47
【问题描述】:

我有一个训练数据集,并且正在构建一些机器学习模型。我无权访问测试集,并且想要处理在训练中未观察到测试中的分类特征之一的可能性。

这是一个玩具示例,说明了我的意思:

我有一个 DataFrame,old,像这样:

old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})

看起来像这样:

    car
0   Audi
1   BMW
2   Mazda

我现在的 one-hot 编码是这样的:

new = pd.get_dummies(old)

然后回来:

   car_Audi car_BMW car_Mazda
0      1       0       0
1      0       1       0
2      0       0       1

这一切都很好。但是,如果我在测试中遇到如下所示的一行:

    car
0   Mercedes

我可以一次性编码,但我最终会得到一个我在测试中没有的列。

Pandas 中有没有一种方法可以忽略我在训练中没有看到的测试值?

所以我的梅赛德斯行的期望输出是:

   car_Audi car_BMW car_Mazda
0      0       0       0

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用reindex来实现这个

    old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})
    new = pd.get_dummies(old)
    test= pd.DataFrame({"car":["Audi", "BMW", "Mazda","Mercedes"]})
    pd.get_dummies(test).reindex(columns=new.columns)
    Out[460]: 
       car_Audi  car_BMW  car_Mazda
    0         1        0          0
    1         0        1          0
    2         0        0          1
    3         0        0          0 # row 3 will be all 0 after modified 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2019-02-21
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多