SVM 分类
ex6.py
import numpy as np
from scipy.io import loadmat
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from ex6modules import *
#Exmaple 1
data=loadmat('ex6data1.mat')
X=data['X']
y=data['y'].ravel()
plotData(X,y)
plt.show()
#Plot C=1's boundary
clf=SVC(C=1,kernel='linear')
clf.fit(X,y)
visualizeBoundaryLinear(X,y,clf)
#Plot C=100's boundary
clf=SVC(C=100,kernel='linear')
clf.fit(X,y)
visualizeBoundaryLinear(X,y,clf)
#Examing Gaussian Kernel
sim=gaussianKernel(np.array([1,2,1]),np.array([0,4,-1]),sigma=2)
print("similarity :",sim)
#Example 2
data=loadmat('ex6data2.mat')
X=data['X']
y=data['y'].ravel()
plotData(X,y)
plt.show()
clf=SVC(C=1,kernel='rbf',gamma=50) #gamma=1/(2*sigma**2)
clf.fit(X,y)
visualizeBoundary(X,y,clf)
#Exmaple 3
data=loadmat('ex6data3.mat')
X=data['X']
y=data['y'].ravel()
Xval=data['Xval']
yval=data['yval']
plotData(X,y)
plt.show()
Csteps=np.array([.01,.03,.1,.3,1,3,10,30])
gammasteps=np.array([1/(2*.01**2),1/(2*.03**2),1/(2*.1**2),1/(2*.3**2),\
1/(2*1**2),1/(2*3**2),1/(2*10**2),1/(2*30**2)])
Cmin,gammamin=findBest(Csteps,gammasteps,X,y,Xval,yval)
clf=SVC(C=Cmin,kernel='rbf',gamma=gammamin)
clf.fit(X,y)
visualizeBoundary(X,y,clf)
ex6modules.py
import matplotlib.pyplot as plt
import numpy as np
from sklearn.svm import SVC
def plotData(X,y):
pos = np.where(y == 1)
neg = np.where(y == 0)
plt.scatter(X[pos, 0]

本文介绍如何使用SVM进行非线性数据分类,并探讨了SVM参数C和gamma的影响。同时,展示了应用SVM构建一个简单的垃圾邮件分类器,作业中结合了朴素贝叶斯和SVM,但预处理部分因技术限制未实现,而是采用输出邮件到txt文件再读取的方式。
最低0.47元/天 解锁文章
2355

被折叠的 条评论
为什么被折叠?



