svm简单例子
一刀两段,就是这样。
一维点分割,二维线切割,三维面间隔。
反正分开两者的总是低一维的平面。
数据
和前面一样,多角度组合成一个结合体 ,用来描述综合特征。数据还是经过数字化处理。
分割
数据分两类,svm本身也只支持二分类问题,想要进行多分类,也只能层级二分类了。
当然了,为了层级的划分数据类型,用决策树来进行引导也是不错的选择。毕竟它描述了影响的大小。
有优先级的划分总能够朝着正确的方向。
然后就是,划分的线条千千万,不过处于极点的终归是那两个----极小,极大。
为了容忍误差,也是避免过拟合,优先选择的是使得两类数据间隔最大的分割方式。
已知两点求直线,这个不难,求的线也只是点斜式。然后求出最大值即可。关键在于线的方向,或者线垂直的方向。
线的两边必然要区分两类。
具体算法?拉格朗日乘子法,KKT。我能叙述但是还没理解完全,好久没过去。也就不丢人了。
小时候的疑问或许现在仍然保留,但是我们仍要前进,止步不前,明白了也是落后。
手段不是目的,或许在使用过程中,另一个角度上,我会对这其中的道理有另一种理解。
结果
划分两类,如是而已。也仅仅是两类。
这是smv的标准结果,如果能够多划分,必然是已经添加其他处理了。
当然,这是线性可分的,对于不可区分的,我们还要把它当做投影,然后折射到高维度的空间内,让它线性可分。
这技巧是核函数,不幸我被拦路太久,接下来再去学习,先吹吹牛逼。
支持向量
这里或许就是最迷惑人的了。明明就是线性分点,但是叫做支持向量,让人不得其解。
不过只能赞叹科学用词的精准。我们想找到的分割线,加上一系列的要求,必然需要两个或以上的标志点。
然而,这两个点之间,且对于两个集体之间,能够最好划分界限的线,是两个集体的向量垂直平分。
这个缘由是:使得两点到分割线距离相等。
也即是说,分隔过程中,两个点做分割线垂线,这垂线段是等长的。
似乎是废话,但是,支持的说法,只是表明了就是这两个代言人。
找到两点之间最长分隔间距并不代表两类的最长分隔间距,也就是说两点连线并不垂直于分割线。
两个支持点的最长间隔反而导致的是两类最近的分割线。
因此,代表了整体利益的支持点,它的指向不能够自私的指向另一个支持点,而是指向另一个集体。
也即是垂直这条分割线,垂直分割线只是就结果而论,分割线因此而产生。
而规则这条线的,就是支持点的指向----对立面。
因此,这个向量方向必然是指向对立面的,而模长是相等的。
最终的分割线,由这两点为标记,所规定的方向和长度而决定。
综合起来,就是空间中过这两点的向量而决定。
案例
复杂的是算法,就结果而言,不外乎由点找线,由线分类。
工程师也只认识1.414,依旧是能力,运用也是知识的一方面,莫不如说是直接体现。
技术诚可贵,销售价更高,若为赚钱故,两者皆可骚。
如果此路不通,也可以绕到侧面,观察一下,说不定有新见解,总之,不能就此止步。
from sklearn import svm# 基本数据
x = [[3, 1], [3, 9], [4, 9], [5, 2]]
# 结果分类
y = [1, -1, -1, 1]
# 分类模型, 线性可分采用linear
model = svm.SVC(kernel='linear')
# 训练
model = model.fit(x, y)
# 打印支持向量(点)
print(model.support_vectors_)
# 支持向量在数据集中的索引
print(model.support_)
# 新数据
new_one = [[3, 3]]
# 模型划分
print(model.predict(new_one))
使用起来,实在无趣,但是个中因果,让人望而却步,欲进不能。
知识可以借鉴,待我储备更多,必要一探究竟。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
