model.predict() 没有生成预期的标签?

model.predict() is not producing the expected labels?

我正在做一个简单的二进制文本分类。 步骤大致是这样的:

  1. 使用 CountVectorizer() 预处理训练数据
  2. 构建一个 keras Sequential() 模型
  3. model.fit(x_train, y_train)
  4. model.evaluate(x_val, y_val)
  5. model.predict(x_test)

我卡在了第 5 步 - 当我打印预测值时,我得到一个 numpy 数组:

 [0.9434484 ]
 [0.3787447 ]
 ...
 [0.87870705]
 [0.7575223 ]
 [0.39714795]]

既然我在做二元分类,我的标签是 0 和 1,我希望预测输出是一样的?现在看起来它预测的是标签 0 和 1 之间的概率,这不是我想要的。我是否需要以某种方式对预测输出进行编码,以便它 returns 正确的标签,或者我在之前的步骤中做错了什么??

一种解决方案是使用简单的统计解释,我们将使用 0.5 截止值。因此,所有高于 0.5 的都将被视为 1,低于 0.5 的将被视为 0。

import numpy as np

pred =  np.array([[0.9434484 ]
 ,[0.3787447 ]
 ,[0.87870705]
 ,[0.7575223 ]
 ,[0.39714795]])

np.round(pred)
Out[37]: 
array([[1.],
       [0.],
       [1.],
       [1.],
       [0.]])

如果结果不是概率那么某事就像:

def sigmoid(x):
  return 1 / (1 + math.exp(-x))

必须用于将其缩放到 0-1 比例。

步骤 5 model.predict(x_test) 可以替换为:

model.predict_classes(x_test)

在顺序模型中预测 类。如果您将来在功能模型中需要它,这是解决方案:

y_prob = model.predict(x_test) 
y_classes = y_prob.argmax(axis=-1)