使用numpy构建SVM模型

该代码示例展示了如何使用sklearn库中的SVM(支持向量机)进行分类,比较了线性核、3次多项式核、径向基函数(RBF)核和sigmoid核的分类结果。通过散点图显示了不同核函数对随机生成数据的预测情况。
摘要由CSDN通过智能技术生成

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
##设置子图数量
fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(7,7)) #创建一个包含4个子图的图形窗口
ax0, ax1, ax2, ax3 = axes.flatten() #将数组中的4个子图对象展平为一维数组
#准备训练样本
x=[[1,8],[3,20],[1,15],[3,35],[5,35],[4,40],[7,80],[6,49]] #包含8个元素,每个元素包含两个数字的列表
y=[1,1,-1,-1,1,-1,-1,1] #包含8个元素的一维列表
##设置子图的标题
titles = ['LinearSVC (linear kernel)',#图形标题为Linearsvc (linear kernel)
'SVC with polynomial (degree 3) kernel',#使用多项式(3次)核的支持向量分类器
'SVC with RBF kernel', ##这个是默认的
'SVC with Sigmoid kernel']#使用sigmoid核的支持向量分类器
##生成随机试验数据(15行2列)
rdm_arr=np.random.randint(1, 15, size=(15,2))#创建一个15行2列的随机整数数组,数组名为rdm_arr,数组中的元素取值范围在[1,15)之间,即取值范围在1-14
def drawPoint(ax,clf,tn):#定义一个名为drawPoint的函数,ax表示要在哪个坐标系上绘制点;clf表示已经训练好的分类器;tn表示数据集的真实标签
for i in x:
ax.set_title(titles[tn])#给当前绘图对象ax设置一个标题为titles[tn],titles是一个字符串数组,[tn]表示一个整数变量
res=clf.predict(np.array(i).reshape(1, -1))#使用训练好的分类器clf对输入的i进行预测,并将预测结果保存在变量res中
if res > 0:
ax.scatter(i[0],i[1],c='r',marker='*')#在绘图对象ax上绘制一个散点图,以数据点(i[0],i[1])为中心,使用红色的星号“*”作为记号
else :
ax.scatter(i[0],i[1],c='g',marker='*')#在绘图对象ax上绘制一个散点图,以数据点(i[0],i[1])为中心,使用绿色的星号“*”作为记号
for i in rdm_arr:
res=clf.predict(np.array(i).reshape(1, -1))#使用训练好的分类器clf对输入的i进行预测,并将预测结果保存在变量res中
if res > 0:
ax.scatter(i[0],i[1],c='r',marker='.')#在绘图对象ax上绘制一个散点图,以数据点(i[0],i[1])为中心,使用红色的点“.”作为记号
else :
ax.scatter(i[0],i[1],c='g',marker='.')#在绘图对象ax上绘制一个散点图,以数据点(i[0],i[1])为中心,使用绿色的点“.”作为记号
if __name__=="__main__":
##选择核函数
for n in range(0,4):
if n==0:
clf = svm.SVC(kernel='linear').fit(x, y)
drawPoint(ax0,clf,0)
elif n==1:
clf = svm.SVC(kernel='poly', degree=3).fit(x, y)
drawPoint(ax1,clf,1)
elif n==2:
clf= svm.SVC(kernel='rbf').fit(x, y)
drawPoint(ax2,clf,2)
else :
clf= svm.SVC(kernel='sigmoid').fit(x, y)
drawPoint(ax3,clf,3)
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值