问题
利用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