为什么二进制分类中的决策边界在我的图上与支持向量机重叠



我正在使用Scikit执行二进制分类。一切似乎都在预测方面有序,但是当我绘制决策边界时,决策边界是重叠的(请参阅图(。现在,我知道多类SVM不可避免地会导致决策边界重叠,但是为什么二进制SVM分类发生这种情况?由于空间被分为两个,因此他们永远不应重叠,因为我知道。因此,任何人都知道为什么只有两种颜色时,我的情节看起来如此无序和许多不同的颜色?这是我绘制的方式吗?谢谢。

带有子图的图片

def createSVMandPlot(X,y,x_name,y_name):
    h = .02  # step size in the mesh
    # we create an instance of SVM and fit out data. We do not scale our
    # data since we want to plot the support vectors
    C = 1.0  # SVM regularization parameter
    svc = svm.SVC(kernel='linear', C=C).fit(X, y) #1 vs 1 
    rbf_svc = svm.SVC(kernel='rbf', gamma='scale', C=C).fit(X, y) #1v1
    poly_svc = svm.SVC(kernel='poly', degree=3, gamma='scale',C=C).fit(X, y) #1v1
    lin_svc = svm.LinearSVC(C=C).fit(X, y) #1 vs rest
    print(str(x_name)+' vs. '+str(y_name))
    for i, clf in enumerate((svc, lin_svc, rbf_svc, poly_svc)):
        X_pred=clf.predict(X)
        X_pred1=np.asarray(X_pred).reshape(len(X_pred),1)
        A=confusion_matrix(X_pred1, y)
        print(A)
        c=0
        for r in range(len(X_pred)):
            if X_pred[r]==y[r]:
                c+=1
        print(str(c)+' out of 34 predicted correctly (true positives)')

    =============================================================================
    with warnings.catch_warnings():
        warnings.filterwarnings("ignore")
        =============================================================================

        x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
        y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
        xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                             np.arange(y_min, y_max, h))
        # title for the plots
        titles = ['SVC w/ linear kernel',
                  'LinearSVC (w/ linear kernel)',
                  'SVM w/ RBF kernel',
                  'SVM w/ poly(degree 3) kernel']
        plt.pause(7)
        for i, clf in enumerate((svc, lin_svc, rbf_svc, poly_svc)):
            # point in the mesh [x_min, x_max]x[y_min, y_max].
            plt.subplot(2, 2, i + 1)
            plt.subplots_adjust(wspace=0.4, hspace=0.4)
            Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
            # Put the result into a color plot
            Z = Z.reshape(xx.shape)
            plt.contourf(xx, yy, Z, alpha=.5)
            # Plot also the training points
            plt.scatter(X[:, 0], X[:, 1], s=13,c=y)
            plt.xlabel(x_name)
            plt.ylabel(y_name)
            plt.xlim(xx.min(), xx.max())
            plt.ylim(yy.min(), yy.max())
            plt.xticks(())
            plt.yticks(())
            plt.title(titles[i])
            plt.show() 

因为您有四个不同的支持向量机:

svc,rbf_svc,poly_svc和lin_svc

迭代地绘制所有这些。这就是您看到重叠边界的原因,因为在同一单个图中显示的4个不同的边界

最新更新