数据分析python SVM解决非线性问题
【摘要】 数据分析python SVM解决非线性问题
1 初始准备
import numpy as np
import matplotlib.pyplot as pl
from sklearn import svm
2 模拟线性不可分数据
线性不可分数据
X=np.c_[(.4,-.7),
(-1.5,-1),
(-1.4,-.9),
(-1.3,-1.2),
(-1.1,-.2),
(-1.2,-.4),
(-.5,1.2),
(-1.5,2.1),
(1,1),
#--
(1.3,.8),
(1.2,.5),
(.2,-2),
(.5,-2.4),
(.2,-2.3),
(0,-2.7),
(1.3,2.1)].T
Y=[0]*8+[1]*8 #前8个一类,后8个一类
3 循环使用不同的SVM核
fignum=1#表示第几副图
#使用三种不同的核
for kernel in ('linear','poly','rbf'):
clf=svm.SVC(kernel=kernel,gamma=2)#gamma=1/(2*a^2)
clf.fit(X,Y)
pl.figure(fignum,figsize=(4,3))
pl.clf()
#支持向量
pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=80,facecolors='none',zorder=10,edgecolors='k')
#第一类
pl.scatter(X[:8,0],X[:8,1],c='g',zorder=10,cmap=pl.cm.Paired,edgecolors='k')
#第二类
pl.scatter(X[8:,0],X[8:,1],c='r',zorder=10,cmap=pl.cm.Paired,edgecolors='k')
pl.axis('tight')
x_min=-3
x_max=3
y_min=-3
y_max=3
XX,YY=np.mgrid[x_min:x_max:200j,y_min:y_max:200j]#复数类似np.linspace 步长
Z=clf.decision_function(np.c_[XX.ravel(),YY.ravel()])
#绘制决策边界和间距
Z=Z.reshape(XX.shape)
pl.figure(fignum,figsize=(4,3))
pl.contour(XX,YY,Z,colors=['g','r','g'],linestyles=['--','-','--'],levels=[-.5,0,.5])#为了图好看,间距设置0.5
pl.xlim(x_min,x_max)
pl.ylim(y_min,y_max)
fignum=fignum+1
pl.show()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)