【问题标题】:How to encode data with multiple class labels?如何对具有多个类标签的数据进行编码?
【发布时间】:2020-10-30 14:43:36
【问题描述】:

我有多个类别的分类问题,比如 A、B、C 和 D。我的数据有以下 y 标签:

y0 = [['A'], ['B'], ['A','D'], ['A'], ['A','C','D'], ['D'], ..., ['C'], ['A','B','C','D'] , ['B']]

我想在这些标签上训练一个随机森林分类器。首先,我需要对标签进行编码。我第一次尝试LabelEncoder

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
le = LabelEncoder()
le.fit_transform(y0)
# encoded labels: array([0, 1, 2, 0, 3, 4, ... 5, 6, 1], dtype=int64)

我也试过OneHotEncoder,但显然LabelEncoderOneHotEncoder 都不能在这里工作。问题是我无法使用多个类标签(例如['A','B','C'])对数据进行编码。我想这些琐碎的编码方法不是这里的方法,那么编码我的类标签的最佳方法是什么?为了澄清,我不想对待例如['A','B']['A']['B'] 完全不同。我希望它是一个不同的类,但同时仍继承 A 类和 B 类的特性。

【问题讨论】:

    标签: python machine-learning encoding scikit-learn one-hot-encoding


    【解决方案1】:

    这种问题称为 multilabel(与 multiclass 相对,其中每个样本只有一个类标签),sklearn 期望多标签问题将目标编码为形状为(n_samples, n_labels) 的二进制数组。您可以使用 MultiLabelBinarizer 以该格式对数据进行编码。

    【讨论】:

      【解决方案2】:

      您可以使用OrdinalEncoder 而不是使用OneHotEncoderLabelEncoder,它将分类特征编码为整数数组。

      生成的类将按顺序排列,例如按字母顺序排列AABAD 等。

      问题可能是AB 是否更类似于ACAD。我的意思是字母顺序可能无法反映真正的相似性,例如序数比例'cold','warm','hot',因此应该使用手动编码和重新排序。但是这些细节需要一些领域知识。

      【讨论】:

        猜你喜欢
        • 2020-11-25
        • 1970-01-01
        • 2018-07-14
        • 2019-03-19
        • 2022-08-04
        • 2019-12-13
        • 2012-02-25
        • 2020-12-22
        • 2021-10-21
        相关资源
        最近更新 更多