【问题标题】:One-hot encoding with categorial dataset: how to deal with different values (less number) in categorical data分类数据集的 One-hot 编码:如何处理分类数据中的不同值(数量较少)
【发布时间】: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顺序以及跨度>

标签: python-3.x machine-learning scikit-learn random-forest one-hot-encoding


【解决方案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 可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 2019-08-13
    • 2019-05-17
    • 2021-10-21
    • 2019-03-19
    • 2018-08-08
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多