Python Keras将类预测与标签合并

Python Keras将类预测与标签合并,python,tensorflow,keras,Python,Tensorflow,Keras,在训练我的网络时,我遇到了一个多标签分类问题,在这个问题中,我将类标签转换为一个热编码 在训练模型并生成预测之后,keras只输出一个值数组,而不指定类标签 合并这些内容的最佳实践是什么,这样我的API就可以向使用者返回有意义的结果 范例 y = pd.get_dummies(df_merged.eventId) y 2CBC9h3uple1SXxEVy8W GiiFxmfrUwBNMGgFuoHo e06onPbpyCucAGXw01mM 12 1

在训练我的网络时,我遇到了一个多标签分类问题,在这个问题中,我将类标签转换为一个热编码

在训练模型并生成预测之后,keras只输出一个值数组,而不指定类标签

合并这些内容的最佳实践是什么,这样我的API就可以向使用者返回有意义的结果

范例

y = pd.get_dummies(df_merged.eventId)
y

2CBC9h3uple1SXxEVy8W    GiiFxmfrUwBNMGgFuoHo    e06onPbpyCucAGXw01mM
12  1                   0                       0
13  1                   0                       0
14  1                   0                       0

prediction = model.predict(pred_test_input)
prediction
array([[0.5002058 , 0.49697363, 0.50251794]], dtype=float32)
预期结果:
{结果:{2CBC9h3uple1SXxEVy8W:0.5002058,…}

编辑:根据评论添加模型-但这只是一个玩具模型

model = Sequential()
model.add(
  Embedding(
    input_dim=embeddings_index.shape[0],
    output_dim=embeddings_index.shape[1],
    weights=[embeddings_index],
    input_length=MAX_SEQ_LENGTH,
    trainable=False,
  )
)
model.add(LSTM(300))
model.add(Dense(units=len(y.columns), activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
编辑2-添加y

因此,我的
y
格式如下:

eventId
123
123
234
...

然后,我使用
y=pd.get\u dummies(df\u merged.eventId)
将其转换为模型可以使用的内容,并希望将eventId追加到预测中。

首先,如果要进行多标签分类,则应使用
二进制交叉熵
损失:

model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
<> P.>重要的是,KARAS的准确性不考虑多标签分类,因此它将是一个误导性度量。更合适的度量是每个类的精度/召回。 要获得类预测,必须对每个类的预测设置阈值,并且必须调整阈值(每个类的阈值不必相同),例如:

class_names = y.columns.tolist()
pred_classes = {}
preds = model.predict(pred_test_input)

thresh = 0.5
for i in range(num_classes):
    if preds[i] > thresh:
        pred_classes[class_name[i]] = preds[i]

这将输出类超过阈值的
pred_类
字典,并包括置信度得分。

这取决于模型结构,请包括它,特别是输出layers@MatiasValdenegro添加-但这实际上只是一个占位符。感谢您的回复,
class\u name
从哪里来从
preds
列表中没有任何对标签的引用。@Keras外部的dendog,它只是从类索引到类名的映射,它是将标签编码为数字形式时的反向操作。这正是我需要帮助的部分-以确保它们正确映射。您有没有关于如果这里有一个帮助函数来创建映射?我将添加我的代码来创建假人。另外@Matias Valdenegro请检查您关于二进制交叉熵的评论。我看到的大多数资源都声明它只用于两个类。@dendog没有什么要检查的,您正在进行多标签分类,这是N二进制分类问题,其中N是类的数量。