如何使用多个 class 标签对数据进行编码?

How to encode data with multiple class labels?

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

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

我想在这些标签上训练随机森林 classifier。首先,我需要对标签进行编码。我首先尝试 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在这里都行不通。问题是我无法使用多个 class 标签(例如 ['A','B','C'])对数据进行编码。我想这些琐碎的编码方法不是去这里的方法,那么编码我的 class 标签的最佳方法是什么?澄清一下,我不想对待例如['A','B']['A']['B'] 完全不同 class。我希望它是一个不同的 class 但同时仍然继承 A 和 B classes.

的特征

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

结果 类 将按顺序排列,例如按字母顺序排列 AABAD

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

这种问题叫做multilabel(相对于multiclass每个样本只有一个class 标签),而 sklearn 期望多标签问题将目标编码为形状为 (n_samples, n_labels) 的二进制数组。您可以使用 MultiLabelBinarizer.

以该格式对数据进行编码