【问题标题】:Plot maximum-margin hyperplane in 3-space with Python使用 Python 在 3 空间中绘制最大边距超平面
【发布时间】:2017-05-07 03:16:10
【问题描述】:

我在 SVM 上发现了这款非常酷的笔记本:

https://github.com/jakevdp/sklearn_tutorial/blob/master/notebooks/03.1-Classification-SVMs.ipynb

但是有点沮丧,因为它没有显示如何在 3 空间中绘制最大边距。我已经尽力了,但不知道该怎么做......例如,我想将它绘制在以下表示(取自笔记本)上:

另外,如果支持向量可以被包围,那将是顶部的雪利酒。

【问题讨论】:

    标签: python plot machine-learning svm data-science


    【解决方案1】:

    这是一个很好的问题,但是提供的笔记本实际上是在“撒谎”。这不是内核的工作方式,虽然这种可视化很酷,但它不是“在 SVM 内部”发生的。让我们把它放在一边,专注于如何在这个投影空间(不是RBF投影空间)中绘制3D分离超平面。

    你所要做的就是:

    1. linear SVM 拟合到用于该图的 3D 数据。
    2. 提取权重 (clf.coefs_) 和偏差 (clf.intercept_)
    3. Plot 3d hyperplane 具有法线 (clf.coefs_) 和与原点的距离 (clf.intercept_)

    【讨论】:

    • 感谢很多 lejlot,但我被困在第 3 步。根据您发布的链接,当我需要为正常 (a,b,c) 输入 3 并为点 (x,y,z) 输入 3 时,我有 2 个 clf.coefs_clf.intercept_ 的值。
    • 你必须适应你绘制的 3d 数据,在你的例子中是 x, y, k(x, y),因此你将有 三个 coefs跨度>
    • 你是完全正确的 thx,clf.coefs_ 提供 3 个值,而不是 2 个。感谢您的帮助,我设法 plot the hyperplane
    • Here你可以找到我的代码。
    【解决方案2】:
    import numpy as np
    from sklearn.svm import SVC
    from sklearn.datasets import make_circles
    
    X_1_2, y = make_circles(100, factor = .1, noise=.1)
    X_3 = np.exp(-(X_1_2[:,0] ** 2 + X_1_2[:,1] ** 2))
    X = np.insert(X_1_2, 2, X_3, axis=1)
    
    clf = SVC(kernel='linear').fit(X,y)
    
    w = clf.coef_
    w1 = w [:, 0]
    w2 = w [:, 1]
    w3 = w [:, 2]
    b = clf.intercept_
    sv = clf.support_vectors_
    
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    xx, yy = np.meshgrid(range(-1,2), range(-1,2))
    zz = (-w1 * xx - w2 * yy - b) * 1. /w3
    
    %matplotlib notebook
    plt3d = plt.subplot(projection='3d')
    plt3d.plot_wireframe(xx, yy, zz, rstride=1, cstride=1, color='purple')
    plt3d.scatter3D(X[:, 0], X[:, 1], X[:, 2], c=y, s=50, cmap='winter')
    plt3d.scatter3D(sv[:, 0], sv[:, 1], sv[:, 2], s=150)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2016-06-19
      • 1970-01-01
      • 2014-07-13
      • 2014-03-31
      • 2018-03-12
      • 1970-01-01
      • 2020-04-11
      • 2012-10-31
      相关资源
      最近更新 更多