分类数据集的 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 编码:如何处理分类数据中的不同值(数量较少)的主要内容,如果未能解决你的问题,请参考以下文章