Sklearn SVM为每个输入预测相同的输出

时间:2020-03-24 05:36:35

标签: python scikit-learn svm

我训练了一个SVM,该SVM具有两个数字[1,2]和一个标签0/1,它是一个二进制分类系统。

所以当我训练它时,我有两个数据集:训练和验证集。这个模型在两个方面都表现出色。然后,我在未用于训练/验证(测试集)的数据集上进行尝试,它对混淆矩阵的处理效果很好。误报比我想要的多,但仍处于可接受的阈值内。

但是当我尝试使用新的单个输入进行操作时,无论如何,它都会给我相同的结果。总是一样的。

这就是我在做什么 #这只是给我一个像0.0002346和0.00056733的数字 sim_dist = image_manager.full_process(img1,img2) diff_dist = image_manager.full_process(img1,img3)

print(sim_dist, diff_dist)
# Get test data for unit test
sim_dist = np.array(sim_dist)
sim_dist = sim_dist.reshape(1,-1)

diff_dist = np.array(diff_dist)
diff_dist = diff_dist.reshape( 1, -1)

THREASHOLDS = [] #for testing recall at each threashold 
for i in np.arange(0.0, 1.0, 0.05):
    THREASHOLDS.append(round(i, 3))

sim_preds = []
diff_preds = []
for threashold in THREASHOLDS:
    pred = (svm.predict_proba(sim_dist)[:,1] >= threashold)
    pred = adjust_preds(pred)
    sim_preds.append([threashold,pred])

    diff_pred = (svm.predict_proba(diff_dist)[:, 1] >= threashold)
    diff_pred = adjust_preds(diff_pred)
    diff_preds.append([threashold, diff_pred])

print(sim_preds)
print(diff_preds)

这将导致两个数组[阈值,0或1]相同,即使数字非常不同。我进行了一些测试,发现如果数字分别为0.000001和0.000002,它将改变,但它将知道数字之间的差异,但高于0.000002的任何内容将是相同的数字。但是我知道我的训练数据从来没有0.000002作为主要数字,大多数数字都在0.0002 <-> 0.0005之间。

我对这是怎么回事感到迷茫。

0 个答案:

没有答案