训练数据集总分类列数:27
测试数据集总分类列数:27
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)OH_cols_test = pd.DataFrame(OH_encoder.fit_transform(X_test[test_low_cardinality_cols]))
编码后,在准备测试数据进行预测时,
测试数据的列数:115
训练数据的列数:122
我检查了测试数据中的基数,与训练数据的列相比,某些列的基数较低。
Train_data.column#1: 2Test_data:column#1: 1Train_data.column#2: 5Test_data:column#2: 3and more..
因此,在进行独热编码时,列数会自动减少。有没有更好的方法来准备测试数据集而不丢失任何数据?
回答:
理想的流程应该是首先在训练数据上拟合OneHotEncoder
,然后在测试数据上进行transform
操作。这样,您将在训练和测试数据中获得一致的列数。
类似于以下操作:
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)OH_encoder.fit(X_train)OH_cols_test = pd.DataFrame(OH_encoder.transform(X_test))
要了解OneHotEncoder
输出的列名,可以使用get_feature_names
方法。可能这个回答会有所帮助。