【问题标题】:One class SVM, got all -1一类 SVM,得到所有 -1
【发布时间】:2016-09-21 06:00:09
【问题描述】:

我正在做一个二元分类,它只为图像返回“是”或“否”。因为我只有一个类的图像,所以我想在“目标”和“异常值”之间进行分类。

例如,我正在对消防员进行分类。

我正在使用 Scikit Learn svm.OneClassSVM()。然而,在训练模型后,我每次都得到“-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”。谁能告诉我怎么了?

【问题讨论】:

  • X_train 到底长什么样?您是否扩展了数据?

标签: python image scikit-learn svm


【解决方案1】:

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

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

您需要自己检查哪个阈值更好。您可以通过对异常类的一些数据运行模型来检查这一点,并检查您得到的答案低于哪个阈值。分数样本越小,离群值越多。

【讨论】:

    【解决方案2】:

    最有可能进行超参数调整。 gamma 应该会低很多。

    您的训练示例“img[0]”的最终形状是什么?

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 2016-02-24
      • 2023-04-01
      • 2015-10-14
      • 1970-01-01
      • 2013-01-13
      • 2015-04-25
      • 2013-01-13
      • 1970-01-01
      相关资源
      最近更新 更多