线性可分的SVM应用测试
(1)简单的预测
测试数据我们给出三个点:(2,0)(1,1)(2,3)。
前两个点我们分为一类,第三个点事另一类可以记为(0,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的数。
代码如下:
|
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。
绘图很简单,只要知道点的坐标就可以绘制出点,只要知道多个点的坐标连接起来就可以构成线。
不过这里注意一下,有个计算斜率和截距的公式,看代码吧。
|
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() |
最终的绘制结果如下: