一个类SVM,全-1

时间:2016-05-24 07:02:42

标签: python image scikit-learn svm

我正在做二进制分类,只返回"是"或"不"对于图片。因为我只有一个班级,所以我想在" Target"之间进行分类。和"离群值&#34 ;.

例如,我正在对消防员进行分类。 enter image description here

我正在使用Scikit Learn svm.OneClassSVM()。然而,在训练模型后,我得到了#34; -1"每次,甚至用于预测训练数据。

这是我的代码:

X_train = []
for subdir, dirs, files in os.walk("training"):
    for imagePath in files:
        print ("path = ", imagePath)
        img = Image.open(os.path.join(subdir, imagePath))
        img = img.resize(sample_size, PIL.Image.ANTIALIAS)
        img = np.array(img)
        img = img[:,:,0]
        img = img.reshape(1, img.shape[0]* img.shape[1])
        X_train.append(img[0])

clf = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
clf.fit(X_train)

然后我预测"训练数据"

的结果
print clf.predict (X_train)

然而,我仍然得到所有" -1"。谁能告诉我什么是错的?

2 个答案:

答案 0 :(得分:0)

超级参数调整最有可能。伽马应该可能低很多。

你的训练样例的最终形状是什么" img [0]"?

答案 1 :(得分:0)

您可以通过计算分数样本来设置阈值水平。例如

clf = OneClassSVM()        
y_scores = clf.score_samples(test)

您需要自己检查哪个阈值更好。您可以通过对异常类的某些数据运行模型来检查该模型,并检查您在哪个阈值以下得到答案。分数样本越少,则异常值越大。