支持向量机python实例_Python机器学习SVM简单应用实例 | kTWO-个人博客

1、前言

在上一篇理论性的文章中我们说过了,SVM是分线性可分和线性不可分两种情况的,线性可分的比较容易理解,比较容易一些,线性不可分的就稍微复杂一点了。我们测试就分别用线性可分和线性不可分两种情况分别测试Python中的SVM算法。

Python中已经封装了SVM的算法在sklearn的库中,若不知道sklearn是啥我想你可能是没有看前面的基础课程,建议去了解一下sklearn。

本篇文章只讲线性可分的情况,下一篇文章讲线性不可分的情况,使用图片识别做例子。

2、线性可分的SVM应用测试

(1)简单的预测

测试数据我们给出三个点:(2,0)(1,1)(2,3)。

前两个点我们分为一类,第三个点事另一类可以记为(0,0,1)。

看代码:

#coding:utf8

#导入svm的库

from sklearn import svm

x = [[2, 0], [1, 1], [2, 3]]

y = [0, 0, 1]  #对应x的分类标记

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([0, 1])   #测试数据

1

2

3

4

5

6

7

8

9

10

11

12

13

#coding:utf8

#导入svm的库

from sklearn import svm

x = [[2, 0], [1, 1], [2, 3]]

y = [0, 0, 1]  #对应x的分类标记

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([0, 1])   #测试数据

上面的代码非常简单就不用讲了,注释写的很清楚。

(2)复杂一些的预测

下面我们做一个复杂点的例子,我们来随机生成两类点,进行SVM的建模然后我们在画布中画出这个模型图。

训练集:随机生成正太分布的点,20个小于0的 20个大于0的数。

代码如下:

#######################复杂的测试###############################

print "########################################\n"

import numpy as np

import pylab as pl

#生成随机点数据集

np.random.seed(0) #固定随机值

x = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]

y = [0] *20 +[1] * 20

print x

print y

clf2 = svm.SVC(kernel='linear')

clf2.fit(x, y)

print clf2.support_

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#######################复杂的测试###############################

print "########################################\n"

import numpy as np

import pylab as pl

#生成随机点数据集

np.random.seed(0) #固定随机值

x = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]

y = [0] *20 +[1] * 20

print x

print y

clf2 = svm.SVC(kernel='linear')

clf2.fit(x, y)

print clf2.support_

模型已经建完,了我们下面就画出这个模型的二维形状。这里我们使用了一个绘图的库叫pylab。

绘图很简单,只要知道点的坐标就可以绘制出点,只要知道多个点的坐标连接起来就可以构成线。

不过这里注意一下,有个计算斜率和截距的公式,看代码吧。

#画出散点图

#画出支持向量的点,参数:x,y,大小

pl.scatter(clf2.support_vectors_[:, 0],clf2.support_vectors_[:, 1],s=80)

#画出全部的点,参数:x,y,颜色,colormap,形状

pl.scatter(x[:, 0],x[:, 1],c=y,cmap=pl.cm.Paired,marker='o')

pl.axis('tight')

#pl.savefig("dd") 保存绘图

pl.show()

1

2

3

4

5

6

7

8

9

#画出散点图

#画出支持向量的点,参数:x,y,大小

pl.scatter(clf2.support_vectors_[:, 0],clf2.support_vectors_[:, 1],s=80)

#画出全部的点,参数:x,y,颜色,colormap,形状

pl.scatter(x[:, 0],x[:, 1],c=y,cmap=pl.cm.Paired,marker='o')

pl.axis('tight')

#pl.savefig("dd") 保存绘图

pl.show()

最终的绘制结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值