如何使用keras处理多类分类中的字符串标签?


18

我是机器学习和keras的新手,现在正在使用keras处理多类图像分类问题。输入的是带标签的图像。经过一些预处理后,训练数据在Python列表中表示为:

[["dog", "path/to/dog/imageX.jpg"],["cat", "path/to/cat/imageX.jpg"], ["bird", "path/to/cat/imageX.jpg"]]

“狗”,“猫”和“鸟”是类标签。我认为应该使用一站式编码解决此问题,但是我对如何处理这些字符串标签不是很清楚。我已经尝试过sklearn的LabelEncoder():

encoder = LabelEncoder()
trafomed_label = encoder.fit_transform(["dog", "cat", "bird"])
print(trafomed_label)

输出是[2 1 0],这与我对[[1,0,0],[0,1,0],[0,0,1]]之类的东西的期望输出不同。可以通过一些编码来完成,但是我想知道是否有某种“标准”或“传统”方式来处理它?

Answers:


14

Sklearn的LabelEncoder模块查找所有类并为每个类分配一个从0开始的数字ID。这意味着,无论您的类表示形式在原始数据集中是什么,您现在都可以通过一种简单一致的方式来表示每个类。它不会进行一键编码,尽管您可以正确识别它很接近,并且可以使用这些ID来快速生成其他代码中的一键编码。

如果您想使用一键编码,则可以使用LabelBinarizer。这非常相似:

 from sklearn.preprocessing import LabelBinarizer
 encoder = LabelBinarizer()
 transfomed_label = encoder.fit_transform(["dog", "cat", "bird"])
 print(transfomed_label)

输出:

[[0 0 1]
 [0 1 0]
 [1 0 0]]

但是,当您尝试预测新的颜色时,hotencoding会对您有什么帮助?也许在您的情况下,您必须重新训练模型。你有什么解决办法吗?
gtzinos

@gtzinos:这看起来像一个不同的问题。也许在网站上问。如果这样做,请弄清楚您是在担心NN预测一个全新的项目(在训练数据中没有看到,但在逻辑上应该在新输入上发生),还是在在线训练数据中遇到新的动态类时添加它们。
尼尔·斯莱特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.