pd.get_dumpies()方法分别调用导致训练集和测试集维度不同(未对齐)

问题

利用sklearn进行数据预处理,sklearn对列的排序很敏感,因此如果训练数据集和测试数据集未对齐,则结果将是无意义的。如果分类在训练数据中与测试数据具有不同数量的值,则可能发生这种情况。

解决方法

思路

我们可以使用aligen命令确保住居的编码方式与训练数据相同,align命令确保列在两个数据集中以相同的顺序显示(它使用列名来标识每个数据集中的哪些列对齐。)参数join ='left’指定我们将执行等效的SQL左连接。这意味着,如果有一列显示在一个数据集而不是另一个数据集中,我们将保留我们的训练数据中的列。参数join ='inner’将执行SQL数据库调用内连接的操作,仅保留两个数据集中显示的列。

示例代码

one_hot_encoded_training_predictors = pd.get_dummies(train_predictors)
one_hot_encoded_test_predictors = pd.get_dummies(test_predictors)
final_train, final_test = one_hot_encoded_training_predictors.align(one_hot_encoded_test_predictors,
                                                                    join='left', 
                                                                    axis=1)

参考

https://www.kaggle.com/dansbecker/using-categorical-data-with-one-hot-encoding

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值