一个类使用python的SVM,无法解释图上的结果

时间:2016-05-06 11:19:45

标签: python machine-learning scikit-learn

我在两个特色数据集上使用One类SVM,其特征是以秒为单位的时间和天数(例如:0表示星期一,6表示星期日)。我将数据分成两部分,并用一个分区训练模型。另一个,我用作测试数据来获得结果。

应用预测函数后,我得到1和-1的数据。我将这个结果列表与测试数据进行比较,并找出外围数据。绘制异常值数据后,我发现所有异常值都集中在同一区域。这对我的用例没有意义。

我猜测问题在于预测结果与测试数据的比较。如果是这样,请建议我一种方法来检索给出-1作为值的数据。

clf = svm.OneClassSVM(nu=0.1, kernel="linear", gamma=0.1)
clf.fit(y_train)
y_pred_train = clf.predict(y_test)
for data,value in zip(y_test,y_pred_train):
if value == -1:
    outl += 1
    outliers_data.append(data)
elif value == 1:
    inl += 1
    inliers_data.append(data)



xx, yy = np.meshgrid(np.linspace(-5, 5, 1), np.linspace(-5, 5, 7500))
Z = clf.decision_function(np.c_[xx.ravel(),yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy,  Z, levels=np.linspace(Z.min(), 0, 7), cmap=plt.cm.Blues_r)
b1 = plt.scatter(y_test[:, 0], y_test[:, 1],  c='red')
b3 = plt.scatter(in_liers[:,0], in_liers[:, 1], c="green")
plt.legend([a.collections[0],b1,b3],
       ["learned frontier", "test","outliers"],
       loc="lower right",
       prop=matplotlib.font_manager.FontProperties(size=11))

另外请建议我是否必须将内核类型更改为rbf或其他任何内容。

0 个答案:

没有答案