我正在做二进制分类,只返回"是"或"不"对于图片。因为我只有一个班级,所以我想在" Target"之间进行分类。和"离群值&#34 ;.
我正在使用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"。谁能告诉我什么是错的?
答案 0 :(得分:0)
超级参数调整最有可能。伽马应该可能低很多。
你的训练样例的最终形状是什么" img [0]"?
答案 1 :(得分:0)
您可以通过计算分数样本来设置阈值水平。例如
clf = OneClassSVM()
y_scores = clf.score_samples(test)
您需要自己检查哪个阈值更好。您可以通过对异常类的某些数据运行模型来检查该模型,并检查您在哪个阈值以下得到答案。分数样本越少,则异常值越大。