【发布时间】:2020-04-14 08:51:58
【问题描述】:
我在这里有点困惑,我对所有那些 low_cardinality_cols 的分类列进行了热编码,并删除了训练和验证数据的剩余分类列。
现在我的目标是将我的模型应用于test.csv 中的新数据。预处理测试数据以匹配训练/验证格式的最佳方法是什么?
我的担忧是:
1. Test_data.csv 对于这些列肯定会有不同的基数
2. 如果我使用训练中的低基数列对测试数据进行热编码,我会得到Input contains NaN,但我的训练、有效和测试列都是相同的数字。
下面是一个热编码示例,这是kaggle比赛/中级课程here
# Apply one-hot encoder to each column with categorical data
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X_train[low_cardinality_cols]))
OH_cols_valid = pd.DataFrame(OH_encoder.transform(X_valid[low_cardinality_cols]))
# One-hot encoding removed index; put it back
OH_cols_train.index = X_train.index
OH_cols_valid.index = X_valid.index
# Remove categorical columns (will replace with one-hot encoding)
# This also saves us the hassle of dropping columns
num_X_train = X_train.drop(object_cols, axis=1)
num_X_valid = X_valid.drop(object_cols, axis=1)
# Add one-hot encoded columns to numerical features
OH_X_train = pd.concat([num_X_train, OH_cols_train], axis=1)
OH_X_valid = pd.concat([num_X_valid, OH_cols_valid], axis=1)
【问题讨论】:
标签: scikit-learn data-science one-hot-encoding