我在个人数据集上使用一个类SVM。 这是我正在使用的代码:
pca = PCA(n_components=2).fit(X0)
X_pca = pca.transform(X0)
X = X_pca
X = X/X.max()
X = sk.preprocessing.scale(X)
n_new = 1641
n_normal = 500
x_normal = X[:n_normal]
x_new = X[:n_new]
n, p = X.shape
svm = OneClassSVM(kernel='rbf', degree=2, gamma=0.0, coef0=0.0, tol=0.001,
nu=.1, shrinking=True, cache_size=200, verbose=False,
max_iter=-1, random_state=None)
svm.fit(x_normal)
anomaly = svm.predict(x_new)
anomaly_score = - svm.decision_function(x_new)
anomaly_normal = svm.predict(x_normal)
anomaly_score_normal = - svm.decision_function(x_normal)
xx1, yy1 = np.meshgrid(np.linspace(-2, 2, 1000), np.linspace(-2, 2, 1000))
Z1 = svm.decision_function(np.c_[xx1.ravel(), yy1.ravel()])
Z1 = Z1.reshape(xx1.shape)
nrow = 2
i = 1
plt.subplot(nrow, 1, i)
plt.scatter(x_normal[:, 0], x_normal[:, 1], c=anomaly_score_normal)
plt.colorbar()
plt.contour( xx1, yy1, Z1, levels=[0], linewidths=2, cmap=plt.cm.Paired)
i += 1
plt.subplot(nrow, 1, i)
plt.scatter(x_new[:, 0], x_new[:, 1], c=anomaly_score)
plt.colorbar()
plt.contour( xx1, yy1, Z1, levels=[0], linewidths=2, cmap=plt.cm.Paired)
plt.show()
我得到的情节如下:
我不明白为什么地块左下方的点是用蓝色着色的,而这些点距决策边界的距离远远大于某些黄点的距离。
我做错了吗?