机器学习第三个算法SVM上(支持向量机)
2017-12-03 11:37
288 查看
突然发现看彭亮老师视频的人很多,而且看完写博客的人也很多,见到一个哥们基本上把彭良老师的视频内容完整的搬抄到博客上,代码什么的也基本没改动,这就可以让我先看博客再看视频,最后自己写博客这样一种思路来学习。然后看博客的过程中发现了好多大神。
那哥们博客
SVM 全名support vector Machine ,翻译成中文是支持向量机,据说是机器学习中近十几年来最好的算法之一,最早是由Vladimir N.Vapnik 和Alexey Ya.Chervonenkis 在1963年提出的。这也是一种分类算法,根据所给数据,画出一条超平面将数据隔开,而这个超平面就是我们所需要训练的模型。
(机器学习一般框架:训练集->提取特征向量->结合一定算法,分类器:比如决策树,KNN->得到结果)
具体举例:
![](https://img-blog.csdn.net/20171203114312092?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图中所示,如果让和我们去画一条直线去区别这两类数据,很明显根据直观判断我们也会选取H2这条直线来区别两类,而这中间的数学依据我们把他抽象成超平面。
![](https://img-blog.csdn.net/20171203114610046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
总共可能有多个超平面?无数条,那么如何选取超平面呢?直观上就是选取使得边际最大的超平面,但是在数学上如何实现呢?
超平面定义:
![](https://img-blog.csdn.net/20171203114923809?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果是二维的则近似成了一条直线
![](https://img-blog.csdn.net/20171203114901843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
用到初高中的数学基本知识,方程大于0则在线的右上方,小于0则在左下方。
![](https://img-blog.csdn.net/20171203114846003?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
抽象一下,将所有的数据点代入超平面方程,发现值大于1,我们则标记成1,小于-1,我们则标记成-1。而继续抽象综合,我们将其有的标记值也放进方程,就能得到一个凸优化的方程,具
4000
体的数学推导彭良老师忽略了,但是如果要成为高手,这个应该是需要知道的。
![](https://img-blog.csdn.net/20171203115715269?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
重要概念理一下:
我们建立的模型是一个超平面:
指得是两类数据中最中的那条线(平面)
而靠近两边数据的两条虚线是边界线边界线的斜率和超平面斜率一致。
在边界线上的数据点,成为支持向量。
举个具体例子:
![](https://img-blog.csdn.net/20171203120210214?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVnYWxoaWdoaGlnaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
简单例子里只有三个数据,分成两类,(1,1)和(2,0)是一类,(2,3)是一类,根据描述,(1,1)和(2,3)是支持向量。
简单代码如下我增加了两个点:
那哥们博客
SVM 全名support vector Machine ,翻译成中文是支持向量机,据说是机器学习中近十几年来最好的算法之一,最早是由Vladimir N.Vapnik 和Alexey Ya.Chervonenkis 在1963年提出的。这也是一种分类算法,根据所给数据,画出一条超平面将数据隔开,而这个超平面就是我们所需要训练的模型。
(机器学习一般框架:训练集->提取特征向量->结合一定算法,分类器:比如决策树,KNN->得到结果)
具体举例:
图中所示,如果让和我们去画一条直线去区别这两类数据,很明显根据直观判断我们也会选取H2这条直线来区别两类,而这中间的数学依据我们把他抽象成超平面。
总共可能有多个超平面?无数条,那么如何选取超平面呢?直观上就是选取使得边际最大的超平面,但是在数学上如何实现呢?
超平面定义:
如果是二维的则近似成了一条直线
用到初高中的数学基本知识,方程大于0则在线的右上方,小于0则在左下方。
抽象一下,将所有的数据点代入超平面方程,发现值大于1,我们则标记成1,小于-1,我们则标记成-1。而继续抽象综合,我们将其有的标记值也放进方程,就能得到一个凸优化的方程,具
4000
体的数学推导彭良老师忽略了,但是如果要成为高手,这个应该是需要知道的。
重要概念理一下:
我们建立的模型是一个超平面:
指得是两类数据中最中的那条线(平面)
而靠近两边数据的两条虚线是边界线边界线的斜率和超平面斜率一致。
在边界线上的数据点,成为支持向量。
举个具体例子:
简单例子里只有三个数据,分成两类,(1,1)和(2,0)是一类,(2,3)是一类,根据描述,(1,1)和(2,3)是支持向量。
简单代码如下我增加了两个点:
from sklearn import svm import pylab as pl import numpy as np x = [[2,0],[0,0],[1,1],[2,3],[4,5]] #点的坐标 y = [0,0,0,1,1] #对应的分类 clf = svm.SVC(kernel = 'linear') #线性分类 clf.fit(x,y) #print(clf) #print(clf.support_vectors_) # 支持向量 #print(clf.support_) #print(clf.n_support_) #print(clf.predict([[5,6]])) w = clf.coef_[0] #目前只有一个权重 #print(w) a = -w[0]/w[1] #斜率 xx = np.linspace(-5,5) yy = a*xx -(clf.intercept_[0]/w[1]) #print(clf.intercept_[0]) b = clf.support_vectors_[0]#支持向量,第一个点 #print(b) yy_down = a * xx +(b[1] - a * b[0]) #截距 b = clf.support_vectors_[-1] #最后一个点 yy_up = a * xx +(b[1] - a *b[0]) print("w:"+str(w)) print("a:"+str(a)) print("support_vectors_:"+str(clf.support_vectors_)) print("coef_:"+str(clf.coef_)) pl.plot(xx,yy,'r-') #中间那条线 pl.plot(xx,yy_up,'k--') #这画的是上面支持向量 pl.plot(xx,yy_down,'k--') #这画的是下面的支持向量 print(clf.support_vectors_) pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100,facecolor='k') pl.scatter([2,0,1,2,4],[0,0,1,3,5],c = y,cmap=pl.cm.Paired,s=50) pl.axis("tight") pl.show()
相关文章推荐
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 【机器学习】支持向量机(SVM)的优化算法——序列最小优化算法(SMO)概述
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习经典算法5-支持向量机SVM
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法-支持向量机(SVM)基础
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法-支持向量机(SVM)基础
- 机器学习---支持向量机(SVM)算法(下)
- (十一)机器学习中的一个常用算法SVM算法,即支持向量机Support Vector Machine(SVM)
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习-python通过序列最小优化算法(SMO)方法编写支持向量机(SVM)
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习---支持向量机(SVM)算法应用(下)
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 机器学习十大经典算法支持向量机SVM(Support victor machine)(下篇)