如何使用多个 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
,但很明显,LabelEncoder
和OneHotEncoder
在这里都行不通。问题是我无法使用多个 class 标签(例如 ['A','B','C']
)对数据进行编码。我想这些琐碎的编码方法不是去这里的方法,那么编码我的 class 标签的最佳方法是什么?澄清一下,我不想对待例如['A','B']
与 ['A']
或 ['B']
完全不同 class。我希望它是一个不同的 class 但同时仍然继承 A 和 B classes.
的特征
您可以使用 OrdinalEncoder
而不是使用 OneHotEncoder
或 LabelEncoder
,它将分类特征编码为整数数组。
结果 类 将按顺序排列,例如按字母顺序排列 A
、AB
、AD
等
问题可能是 AB
是否更类似于 AC
或 AD
。我的意思是字母顺序可能无法反映真正的相似性,例如在序数 'cold','warm','hot'
中,因此应该使用手动编码和重新排序。但是这个细节需要一些领域知识。
这种问题叫做multilabel(相对于multiclass每个样本只有一个class 标签),而 sklearn 期望多标签问题将目标编码为形状为 (n_samples, n_labels)
的二进制数组。您可以使用 MultiLabelBinarizer
.
以该格式对数据进行编码
我有多个 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
,但很明显,LabelEncoder
和OneHotEncoder
在这里都行不通。问题是我无法使用多个 class 标签(例如 ['A','B','C']
)对数据进行编码。我想这些琐碎的编码方法不是去这里的方法,那么编码我的 class 标签的最佳方法是什么?澄清一下,我不想对待例如['A','B']
与 ['A']
或 ['B']
完全不同 class。我希望它是一个不同的 class 但同时仍然继承 A 和 B classes.
您可以使用 OrdinalEncoder
而不是使用 OneHotEncoder
或 LabelEncoder
,它将分类特征编码为整数数组。
结果 类 将按顺序排列,例如按字母顺序排列 A
、AB
、AD
等
问题可能是 AB
是否更类似于 AC
或 AD
。我的意思是字母顺序可能无法反映真正的相似性,例如在序数 'cold','warm','hot'
中,因此应该使用手动编码和重新排序。但是这个细节需要一些领域知识。
这种问题叫做multilabel(相对于multiclass每个样本只有一个class 标签),而 sklearn 期望多标签问题将目标编码为形状为 (n_samples, n_labels)
的二进制数组。您可以使用 MultiLabelBinarizer
.