数据分析python SVM解决非线性问题

举报
the-order 发表于 2022/05/10 20:29:44 2022/05/10
【摘要】 数据分析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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。