分类数据集的 One-hot 编码:如何处理分类数据中的不同值(数量较少)

Posted

技术标签:

【中文标题】分类数据集的 One-hot 编码:如何处理分类数据中的不同值(数量较少)【英文标题】:One-hot encoding with categorial dataset: how to deal with different values (less number) in categorical data 【发布时间】:2020-03-23 15:35:58 【问题描述】:

训练数据集总类别列:27 P>

测试数据集总类别列:27 P>

OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_test = pd.DataFrame(OH_encoder.fit_transform(X_test[test_low_cardinality_cols]))

编码后下,同时准备测试数据进行预测, P>

从测试数据列数:115 P>

这列车数据列数:122 P>

我检查的基数在测试数据,它是为低几列比较训练数据列。

Train_data.column#1: 2
Test_data:column#1: 1

Train_data.column#2: 5
Test_data:column#2: 3
and more..

所以自动而一个热编码,列的数目将减少。有没有更好的方式而没有任何数据丢失准备测试数据集? P>

【问题讨论】:

你施加一个热编码器分别对训练和测试数据跨度> 是..训练和测试数据是不同的。所以我没有编码训练,然后进行评估。然后我申请的试验数据。别的我需要匹配每个分类的列的值,如果匹配,我可以包括用于一个热编码这些列,否则我应该排除那些共lumns其是数据丢失。跨度> 有一次,我有同样的问题,我所做的就是用零添加缺少的列测试集带回相同的形状。并最小化的效果,我试图保持的训练集和测试集相同的列的顺序。跨度> 而编码,列名成为1,2,3,4 ...。所以其难以与训练列比较跨度> 添加前缀山坳名字..像something.1,something.2 ..somehow你需要测试集的形状相同,尝试添加一个零列检查performance.it更好保持COL顺序以及跨度> 【参考方案1】:

理想的过程是在训练数据中拟合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 方法。这个answer 可能会有所帮助。

【讨论】:

以上是关于分类数据集的 One-hot 编码:如何处理分类数据中的不同值(数量较少)的主要内容,如果未能解决你的问题,请参考以下文章

如何处理数据不均衡问题(分类问题)

如何处理多类文本分类中不在训练集中的测试集标签?

如何处理 k-Nearest Neighbor 算法中的重复数据点?

制作决策树时如何处理数据

如何处理多个非序分类变量?

如何处理类别型特征