[英]How to encode data with multiple class labels?
我有多个类的分类问题,比如 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
,但很明显, LabelEncoder
和OneHotEncoder
都不能在这里工作。 问题是我无法使用多个 class 标签(例如['A','B','C']
)对数据进行编码。 我想这些简单的编码方法不是 go 的方法,那么编码我的 class 标签的最佳方法是什么? 为了澄清,我不想将例如['A','B']
视为与['A']
或['B']
完全不同的 class 。 我希望它是一个不同的 class 但同时仍然继承 A 和 B 类的特性。
这种问题称为多标签(与多类相反,其中每个样本只有一个 class 标签),sklearn 期望多标签问题将目标编码为形状为(n_samples, n_labels)
的二进制数组。 您可以使用MultiLabelBinarizer
以该格式对数据进行编码。
而不是使用OneHotEncoder
或LabelEncoder
您可以使用OrdinalEncoder
将分类特征编码为 integer 数组。
结果类将按顺序排列,例如按字母顺序A
、 AB
、 AD
等。
问题可能是AB
是否更类似于AC
或AD
。 我的意思是字母顺序可能无法反映真正的相似性,例如序数比例'cold','warm','hot'
,因此应该使用手动编码和重新排序。 但是这些细节需要一些领域知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.