支持向量分类器的决策边界图(与分离超平面的距离)

时间:2018-08-10 04:26:46

标签: python-3.x machine-learning scikit-learn svm

我正在阅读AurélienGéron撰写的“使用Scikit-Learn和TensorFlow进行动手机器学习”一书。下面的代码是用Python 3编写的。

在Chap的GitHub页面上。支持向量机问题的5种解决方案中,有以下代码可用于绘制SVC决策边界(https://github.com/ageron/handson-ml/blob/master/05_support_vector_machines.ipynb):

def plot_svc_decision_boundary(svm_clf, xmin, xmax):
    w = svm_clf.coef_[0]
    b = svm_clf.intercept_[0]

    # At the decision boundary, w0*x0 + w1*x1 + b = 0
    # => x1 = -w0/w1 * x0 - b/w1
    x0 = np.linspace(xmin, xmax, 200)
    decision_boundary = -w[0]/w[1] * x0 - b/w[1]

    margin = 1/w[1]
    gutter_up = decision_boundary + margin
    gutter_down = decision_boundary - margin

    svs = svm_clf.support_vectors_
    plt.scatter(svs[:, 0], svs[:, 1], s=180, facecolors='#FFAAAA')
    plt.plot(x0, decision_boundary, "k-", linewidth=2)
    plt.plot(x0, gutter_up, "k--", linewidth=2)
    plt.plot(x0, gutter_down, "k--", linewidth=2)

我的问题是,为什么边距定义为1/w[1]?我认为保证金应为1/sqrt(w[0]^2+w[1]^2)。也就是说,边距是2/L_2_norm(weight_vector)的一半,即1/L_2_norm(weight_vector)。参见https://math.stackexchange.com/questions/1305925/why-does-the-svm-margin-is-frac2-mathbfw

这是代码错误吗?

1 个答案:

答案 0 :(得分:1)

给出:

  

决策边界:w0 * x0 + w1 * x1 + b = 0

     

装订线:w0 * x0 + w1 * x1 + b = 1 ,即w0 * x0 + w1 *(x1 -1 / w1 )+ b = 0

     

装订线向下:w0 * x0 + w1 * x1 + b = -1 ,即w0 * x0 + w1 *(x1 + 1 / w1 )+ b = < strong> 0

对应于决策边界线中的(x0,x1),(x0,x1 + 1 / w1 )和(x0,x1 -1 / w1 )是点在gutter_up / down行中。

Figure 5-2. Sensitivity to feature scales