无法理解 SVM 和 LR 中决策边界的绘制

Posted

技术标签:

【中文标题】无法理解 SVM 和 LR 中决策边界的绘制【英文标题】:Cannot understand plotting of decision boundary in SVM and LR 【发布时间】:2013-07-30 09:36:02 【问题描述】:

例如,我们有 f(x) = x。如何绘制它?我们取一些 x 然后计算 y 并再次执行此操作,然后按点绘制图表。简单明了。

但我无法理解如此清楚地绘制决策边界 - 当我们没有 y 绘制时,只有 x。

SVM 的 Python 代码:

h = .02  # step size in the mesh
Y = y
# 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)
rbf_svc = svm.SVC(kernel='rbf', gamma=0.7, C=C).fit(X, Y)
poly_svc = svm.SVC(kernel='poly', degree=3, C=C).fit(X, Y)
lin_svc = svm.LinearSVC(C=C).fit(X, Y)

# create a mesh to plot in
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))


for i, clf in enumerate((svc, rbf_svc, poly_svc, lin_svc)):
    # Plot the decision boundary. For that, we will asign a color to each
    # point in the mesh [x_min, m_max]x[y_min, y_max].

绘制图表的所有内容都在这里,我是如何理解的:

    pl.subplot(2, 2, i + 1)
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    pl.contourf(xx, yy, Z, cmap=pl.cm.Paired)
    pl.axis('off')

    # Plot also the training points
    pl.scatter(X[:, 0], X[:, 1], c=Y, cmap=pl.cm.Paired)

pl.show()

有人能用文字解释一下这个绘图是如何工作的吗?

【问题讨论】:

pl.scatter 是否在绘制您要询问的线?在我看来,很多重要的代码都丢失了,我们需要理解这个问题。也许是因为我对SVM一无所知。我想你问的那行可能只是包含在 X[:,1] 中,但除非你说你是如何初始化 X 的,否则我们无法真正知道。 matty T pain, pl.scatter(...) 绘制数据示例但不绘制决策边界。它是 pylab 的库函数。 你弄明白了吗?如果您发布该人物的图片并告诉我们您了解哪些部分以及您不了解哪些部分,将会有所帮助。 【参考方案1】:

基本上,您正在绘制函数 f : R^2 -> 0,1,因此它是从二维空间到只有两个值的退化空间的函数 - 01

首先,您生成要在其上可视化函数的网格。如果您的示例使用f(x)=y,您将选择某个区间[x_min,x_max],您将在该区间上获取具有一定距离eps 的点并绘制f 的相应值

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))

接下来,我们计算函数值,在我们的例子中它是一个SVM.predict 函数,结果是01

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

这与您为所有已分析的x 计算f(x) 的示例相同

现在,可能导致误解的“棘手”部分是

pl.contourf(xx, yy, Z, cmap=pl.cm.Paired)

此函数绘制f 函数的轮廓。为了在平面上可视化 3 维函数,通常会创建等高线图,它就像函数的高度图。如果在它们周围检测到f 的值发生较大变化,则在它们之间画一条线。

来自mathworld 的好例子

显示此类图的示例。

在 SVM 的情况下,我们只有两个可能的值 - 01,因此,等高线正好位于二维空间的这些部分,其中一方面是f(x)=0,另一方面是f(x)=1。因此,即使它看起来像“2d 图”,它也不是——您可以观察到的这个形状(决策边界)是 3d 函数中最大差异的可视化。

在为多分类示例可视化它的sklearn 文档中,当我们有f : R^2 -> 0,1,2 时,这个想法完全相同,但是在f(x1)!=f(x2) 的相邻x1 和x2 之间绘制轮廓。

【讨论】:

以上是关于无法理解 SVM 和 LR 中决策边界的绘制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中的 SVM sklearn 数据中绘制决策边界?

如何在 sklearn Python 中绘制 SVM 决策边界?

SVM 与 LR的异同

SVM 决策边界绘图中的错误

机器学习支持向量机SVM逻辑回归LR决策树DT的直观对比和理论对比,该如何选择(面试回答)?

绘制scikit-learn(sklearn)SVM决策边界/表面