我有一个涉及多个类别的分类问题,比如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, LabelEncoderle = LabelEncoder()le.fit_transform(y0)# 编码后的标签: array([0, 1, 2, 0, 3, 4, ... 5, 6, 1], dtype=int64)
我也尝试了OneHotEncoder
,但显然,无论是LabelEncoder
还是OneHotEncoder
在这里都不适用。问题是我无法对具有多个类标签的数据(例如['A','B','C']
)进行编码。我猜这些简单的编码方法在这里行不通,那么最好的编码类标签的方法是什么?为了澄清,我不想将例如['A','B']
视为与['A']
或['B']
完全不同的类。我希望它是一个不同的类,但同时仍继承A和B类的特征。
回答:
这种问题被称为多标签(与每个样本只有一个类标签的多类别相对),sklearn期望多标签问题将目标编码为形状为(n_samples, n_labels)
的二进制数组。你可以使用MultiLabelBinarizer
以这种格式编码你的数据。