Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理多标签分类问题中的JSON文件?_Python_Keras_Neural Network_Deep Learning_Multilabel Classification - Fatal编程技术网

Python 如何处理多标签分类问题中的JSON文件?

Python 如何处理多标签分类问题中的JSON文件?,python,keras,neural-network,deep-learning,multilabel-classification,Python,Keras,Neural Network,Deep Learning,Multilabel Classification,我有一个多标签问题。我已经阅读了很多教程,并且都使用CSV。但我有一个JSON。一个图像可以有一到三个标签。这就是JSON的样子:{“PIC_名称”:[“Label1”],“PIC_名称”:[“Label2”,“Label6”],“PIC_名称”:[“Label20”],“PIC_名称”:[“Label4”],“PIC_名称”:[“Label5”],“PIC_名称”:[“Label1”],“PIC_名称”:[“Label15”,… CSV使用二进制标签。但我只有字符串。有20个不同的标签。如果它

我有一个多标签问题。我已经阅读了很多教程,并且都使用CSV。但我有一个JSON。一个图像可以有一到三个标签。这就是JSON的样子:
{“PIC_名称”:[“Label1”],“PIC_名称”:[“Label2”,“Label6”],“PIC_名称”:[“Label20”],“PIC_名称”:[“Label4”],“PIC_名称”:[“Label5”],“PIC_名称”:[“Label1”],“PIC_名称”:[“Label15”,…

CSV使用二进制标签。但我只有字符串。有20个不同的标签。如果它应该像在教程中一样,那么图片应该用23个二进制数字标记。如果标签(例如Label1)为真,则有一个1,所有其他标签都设置为0。我使用Keras

有人知道我如何用JSON解决这个问题吗?这是我读过的一个教程示例:


例如,我们有一张有猫、狗和鸟的图片。这张图片显示了狗和鸟。然后它应该是这样的:0 1 1。因为图片中没有猫,第一个值是0。我希望它可以像上面的教程中那样

如果我理解你的问题,你想用[1 0 0…]替换[“Label1”],即一个热编码标签

如果是,您可以查看多标签问题的位置

例如,你可以这样做:

from sklearn.preprocessing import MultiLabelBinarizer

labels = [("blue", "jeans"),("blue", "dress"),("red", "dress"),("red", "shirt"), 
         ("blue", "shirt"),("black", "jeans")]

mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(labels)

print(labels)
它打印:

然后你有一个热编码的标签

在你的问题中,你将有[“Label2”,“Label6”]而不是衣服

编辑:如果只有一个标签而不是两个,则它也可以工作:

from sklearn.preprocessing import MultiLabelBinarizer

labels = [("blue",),("blue", "dress"),("red", "dress"),("red", "shirt"), 
         ("blue", "shirt"),("black", "jeans")]

mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(labels)

print(labels)

要获得类的索引,可以使用:

print(mlb.classes_)
编辑2:

例如:

from sklearn.preprocessing import MultiLabelBinarizer

labels = [("Label1",),("Label2",),("Label3",),("Label4","Label1"),        
         ("Label4","Label5")]

mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(labels)

print(labels)

print(mlb.classes_)

编辑3:

这些措施将发挥作用:

labels = [["Label1"],["Label2"],["Label3"],["Label4","Label1"], 
         ["Label4","Label5"]]

labels = [("Label1",),("Label2",),("Label3",),("Label4","Label1"), 
         ("Label4","Label5")]
这不会(没有逗号):


谢谢你的回答。我需要知道所有存在的标签组合吗?我有23个不同的标签,所有标签都可以相互组合。顺序重要吗?它必须是“(“蓝色”、“衬衫”)”还是也可以是(“衬衫”、“蓝色”)?顺序不重要。使用sklearn的方法,你只需要输入“MultiLabelBinarizer”使用所有标签,它将理解数据集中存在的所有不同标签。您不需要知道存在的所有标签组合。因此,它可以是这样的吗?标签=[((“Label1”)、((“Label2”)、(“Label3”)、(“Label4”)等]print(mlb.classes_3;)提供此输出如果你给多LabelBinarizer一些类似的东西:labels=[“Label1”],[“Label2”],[“Label3”],[“Label4”,“Label1”],[“Label4”,“Label5”],[“Label3”],[“Label4”,“Label1”],[“Label1”,“Label4”,“Label5”],它会工作得很好。如果你把它替换掉['在列表中的括号内,不要忘记逗号!
labels = [("Label1"),("Label2"),("Label3"),("Label4","Label1"), 
         ("Label4","Label5")]