我有一个非常简单的一维分类问题:值[0,0.5,2]及其关联类[0,1,2]的列表。我想知道这些类之间的分类界限。
调整iris example(用于可视化目的),去掉非线性模型:
X = np.array([[x, 1] for x in [0, 0.5, 2]])
Y = np.array([1, 0, 2])
C = 1.0 # SVM regularization parameter
svc = svm.SVC(kernel='linear', C=C).fit(X, Y)
lin_svc = svm.LinearSVC(C=C).fit(X, Y)
给出以下结果:
LinearSVC正在返回垃圾(为什么?),但具有线性内核的SVC工作正常。所以我想得到边界值,你可以用图形猜测:~0.25和~1.25。
那就是我迷路的地方:svc.coef_
返回
array([[ 0.5 , 0. ],
[-1.33333333, 0. ],
[-1. , 0. ]])
而svc.intercept_
返回array([-0.125 , 1.66666667, 1. ])
。
这并不明确。
我一定是错过了什么傻事,怎么才能得到那些价值观呢?它们似乎很容易计算,在x轴上迭代以找到边界是荒谬的。。。
从SVM获取决策线,演示1
打印:
逼近SVM的分离n-1维超平面,演示2
打印:
这些超平面都像箭一样直,只是在更高的维度上是直的,仅仅局限于三维空间的凡人是无法理解的。这些超平面通过创造性的核心功能被投射到更高的维度,而不是为了你的观赏乐趣而被压平回到可见维度。这是一个视频,试图传达一些在演示2中发生的事情的直觉:https://www.youtube.com/watch?v=3liCbRZPrZA
根据coef和intercept计算的精确边界
我认为这是一个很好的问题,在文档中没有找到一个通用的答案。这个网站真的需要乳胶,但无论如何,我会尽力不。。。
通常,超平面由其单位法向和与原点的偏移量定义。因此,我们希望找到形式为
x dot n + d > 0
(其中>
当然可以替换为>=
)的一些决策函数。在SVM Margins Example的情况下,我们可以操纵它们开始时的方程来阐明其概念意义。首先,让我们建立写
coef
来表示coef_[0]
和intercept
来表示intercept_[0]
的符号便利性,因为这些数组只有1个值。然后用简单的代换得到方程:乘以
coef[1]
,我们得到所以我们看到,系数和截距的函数和它们的名字大致相同。应用符号的一个快速概括应该会使答案变得清晰——我们将用一个向量x来代替
x
和y
。一般来说,支持向量机分类器的coef和intercept成员的维数与训练数据集相匹配,因此我们可以将这个方程外推到任意维数的数据上。为了避免让任何人误入歧途,下面是使用支持向量机原始变量名的最终广义决策边界:
其中数据的维度是
n
。或者更简洁:
其中
i
在输入数据的维度范围内求和。我也有同样的问题,最终在sklearn documentation中找到了答案。
给定权重
W=svc.coef_[0]
和截距I=svc.intercept_
,决策边界是与
相关问题 更多 >
编程相关推荐