2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 支持向量机python实例_Python机器学习SVM简单应用实例 | kTWO-个人博客

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

时间:2024-02-15 12:21:41

相关推荐

支持向量机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的库

fromsklearnimportsvm

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

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

clf=svm.SVC(kernel='linear')#线性核函数

clf.fit(x,y)

printclf

printclf.support_vectors_#支持向量

printclf.support_#支持向量是哪几个(下标)

printclf.n_support_#每一类中有几个支持向量

printclf.predict([0,1])#测试数据

1

2

3

4

5

6

7

8

9

10

11

12

13

#coding:utf8

#导入svm的库

fromsklearnimportsvm

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

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

clf=svm.SVC(kernel='linear')#线性核函数

clf.fit(x,y)

printclf

printclf.support_vectors_#支持向量

printclf.support_#支持向量是哪几个(下标)

printclf.n_support_#每一类中有几个支持向量

printclf.predict([0,1])#测试数据

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

(2)复杂一些的预测

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

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

代码如下:

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

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

importnumpyasnp

importpylabaspl

#生成随机点数据集

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

printx

printy

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

clf2.fit(x,y)

printclf2.support_

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

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

importnumpyasnp

importpylabaspl

#生成随机点数据集

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

printx

printy

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

clf2.fit(x,y)

printclf2.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()

最终的绘制结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。