为什么SVM只预测一个类(当有两个类时),甚至在train_data上?

时间:2017-10-30 00:28:44

标签: python classification svm prediction

我有一个数据集,其中包含“概率”(X),“结果”(y)和“损失”(z)。 X包含分类的概率。将选择每个阵列的最高概率。对于每个数组,都有相应的“丢失”值和“结果”值。但有时这种分类是不正确的。这由y中的结果表示。 1 =正确的分类,0 =错误的分类。

我想预测另一个数据集(test_data)的结果。

X看起来像这样(5461行):

[[  7.52080159e-05   3.52246707e-06   9.99919772e-01   1.60897298e-06]
 [  5.29095473e-07   1.37183363e-07   9.99999166e-01   6.71615084e-08]
 [  8.79671461e-06   3.60849692e-04   4.20530778e-05   9.99588311e-01]
 [...]]

总体而言,只有0,其余为1。而且,概率非常高(约95%和更高)。

不过,我还是想正确预测结果。事实上,即使我用train_data测试它,SVM也只返回1。无论是否应该0。 例如。对于X[29],结果为0。但预测返回1

import numpy as np
from sklearn import svm

f = np.load('analyse.npy', encoding='latin1', fix_imports=True)
test_file = np.load('test.npy', encoding='latin1', fix_imports=True)

X = np.array(f.item()['probabilities'])
X = X.reshape(-1,4)

print(X[:3])

y = np.array(f.item()['result'])

print(list(y))

clf = svm.SVC(kernel='linear');
clf = clf.fit(X, y)

pred = clf.predict(X)
print(list(pred))

print(X[29])
print(y[29])

输出: Output

我在这里缺少什么?我对SVM比较陌生。首先,我想跳过“损失”值,但似乎,我需要它,对吗?由于概率非常高,我必须对它们进行缩放/标准化吗?

0 个答案:

没有答案