【问题标题】:SVM : support vector has margin of 0?SVM:支持向量的边距为 0?
【发布时间】:2018-10-26 19:41:10
【问题描述】:

我正在尝试为 3D 点生成二进制分类的分离超平面。

这是我的观点,它们是线性可分的。

Class 0: [[0,0,0], [0,1,1], [1,0,1], [0.5,0.4,0.4]]
Class 1: [[1,3,1], [2,0,2], [1,1,1]]

来自sklearn.svm.SVC(kernel='linear'),产生以下内容:

w = clf.coeff_ = [ 1.   0.5  0.5]
b = clf.intercept_ = -2.0
sv = clf.support_vectors_ = 
array([[ 0.,  1.,  1.],
       [ 1.,  0.,  1.],
       [ 2.,  0.,  2.],
       [ 1.,  1.,  1.]])

理解是,如果w.dot(x)+b返回负值,那么x属于Class 0;如果为正值,则为 1 类。但是,w.dot([1,1,1])+b = 0 !这意味着[1,1,1],它是来自第 1 类的支持向量位于分离平面上.....而没有来自第 0 类的 SV 位于 sep .飞机。

所以我的问题是......

我的数据是线性可分的,因此理论上 SVM 的两个类的边距都应该 >0。但在这里,我的 SVM 对 class1 有一个 =0,对 class0 有 >0 边距。为什么会这样?如果我的超平面不正确,我该如何计算正确的超平面?谢谢。

代码

from sklearn import svm
X0 = [[0,0,0], [0,1,1], [1,0,1], [0.5,0.4,0.4]]
Y0 = [0] * len(X0)
X1 = [[1,3,1], [2,0,2], [1,1,1]]
Y1 = [1] * len(X1)
X = X0 + X1
Y = Y0 + Y1
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)
sv = clf.support_vectors_
w = clf.coef_[0] 
b = clf.intercept_[0]
print([w.dot(X0[i])+b for i in range(len(X0))]) # negative class
print([w.dot(X1[i])+b for i in range(len(X1))]) # positive class

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    是的!您的解释是正确的,如果 w.dot(x)+b 返回负值,则 x 属于 0 类;

    这里需要更仔细地强调一下!

    分类是根据 THE SIGN 进行的!

    SIGNUM(w.dot([x])+b)w.dot([1, 1, 1]) + b = 0,0 被认为是POSITIVE!这就是为什么 [1, 1, 1] 被认为是 1 类的原因

    X1 = [[1,3,1], [2,0,2], [1,1,1]]

    clf.predict(X1)

    你得到

    array([1, 1, 1])

    对于 2D 中的点,您首先要找到一条正确分隔数据的线。这条线称为决策边界!现在在这个决策边界? w.dot([1, 1, 1]) + b = 0 那么你要做的是,找到那条线周围最宽的区域(称为MARGIN/MAXIMUM SEPARATING HYPERPLANE/WIDEST ROAD),它使两个类中的点之间的距离最大化!

    什么时候类是完全可分离的?

    在您的边距的一端受支持向量控制? w.dot([1, 1, 1]) + b = -1

    在您的边距的另一端受支持向量控制? w.dot([1, 1, 1]) + b = +1

    但是,当类不能完全分离时?您可以拥有完全位于决策边界本身的边距!这取决于您的数据!在您的情况下,您的边距/最大分离超平面/最宽道路的一部分位于您的决策边界上!而且没办法!

    【讨论】:

    • 感谢您的回复!所以你对我的问题的回答是“没办法”?对不起,我还是不明白。我的数据是线性可分的,所以理论上一个支持向量机应该有两个类的边距 > 0。但在这里,我的 SVM 对 class1 有一个 =0,对 class0 有 >0 边距。对此有更多的理论/概念答案吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-16
    • 2011-11-09
    • 1970-01-01
    • 2023-03-15
    • 2019-06-27
    • 1970-01-01
    • 2020-07-13
    • 2016-03-17
    相关资源
    最近更新 更多