Python 3.x 分类数据集的一个热门编码:如何处理分类数据中的不同值(数量较少)

Python 3.x 分类数据集的一个热门编码:如何处理分类数据中的不同值(数量较少),python-3.x,machine-learning,scikit-learn,random-forest,one-hot-encoding,Python 3.x,Machine Learning,Scikit Learn,Random Forest,One Hot Encoding,培训数据集分类列总数:27 OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False) OH_cols_test = pd.DataFrame(OH_encoder.fit_transform(X_test[test_low_cardinality_cols])) 测试数据集总分类列数:27 OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)

培训数据集分类列总数:27

OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_test = pd.DataFrame(OH_encoder.fit_transform(X_test[test_low_cardinality_cols]))
测试数据集总分类列数: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

我检查了测试数据中的基数,与训练数据列相比,少数列的基数较低


因此,在一次热编码时,列数将自动减少。有没有更好的方法来准备测试数据集而不丢失任何数据?

理想的方法是在训练数据中安装
OneHotEncoder
,然后在测试数据中进行
转换。通过这种方式,您将在训练和测试数据中获得一致数量的列

如下所示:

OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_encoder.fit(X_train)

OH_cols_test = pd.DataFrame(OH_encoder.transform(X_test))

要了解
onehotcoder
输出的列名,请使用
get\u feature\u names
方法。这可能会有所帮助。

您分别为培训和测试数据应用了一个热编码器?是的。。培训和测试数据是不同的。所以我做了编码训练,然后评估。然后我申请了测试数据。否则我需要匹配每个分类列的值,如果匹配,我可以将这些列包含在一个热编码中,否则我应该排除那些会丢失数据的共列。一旦我遇到同样的问题,我所做的就是将丢失的带零的列添加到测试集中,以恢复到相同的形状。为了最小化影响,我尝试保持训练集和测试集的列顺序相同。编码时,列名变成1,2,3,4。因此,很难将其与培训列进行比较。在列名称前添加前缀。。就像.1,2.一样。不知何故,您需要相同形状的测试集,尝试添加零列并检查性能。最好也保持列顺序。