我在两个特色数据集上使用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或其他任何内容。