model.predict() 没有生成预期的标签?
model.predict() is not producing the expected labels?
我正在做一个简单的二进制文本分类。
步骤大致是这样的:
- 使用 CountVectorizer() 预处理训练数据
- 构建一个 keras Sequential() 模型
- model.fit(x_train, y_train)
- model.evaluate(x_val, y_val)
- 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)
我正在做一个简单的二进制文本分类。 步骤大致是这样的:
- 使用 CountVectorizer() 预处理训练数据
- 构建一个 keras Sequential() 模型
- model.fit(x_train, y_train)
- model.evaluate(x_val, y_val)
- 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)