1、预先知识学习
1、核函数
从低维空间计算高维空间的值降低运算量
2、常用核函数:
2、问题:
任务:使用高斯核函数解决线性不可分问题,并观察gamma取值对模型复杂度的影响
3、解题
1、导入数据集
data = sio.loadmat(path)
print(data.keys())
X,y = data['X'],data['y']
print(X.shape,y.shape)
2、数据可视化
def plot_data():
plt.scatter(X[:,0],X[:,1],c=y.flatten(),cmap='jet')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend
plt.show()
plot_data()
结果:
可以看出,这一定是线性不可分的
3、建立SVM:
svc1 = SVC(C=1,kernel='rbf',gamma=1)
svc1.fit(X,y.flatten())
score = svc1.score(X,y.flatten())
print(score)
测试结果,准确率为80%左右
4、边界可视化:
def plot_boundary(model):
x_min,x_max = 0,1
y_min,y_max = 0.4,1
xx,yy = np.meshgrid(np.linspace(x_min,x_max,500),
np.linspace(y_min,y_max,500))
z = model.predict(np.c_[xx.flatten(),yy.flatten()])
zz = z.reshape(xx.shape)
plt.contour(xx,yy,zz)
plot_boundary(svc1)
plot_data()
结果:
5、加大gamma
gamma=100
svc100 = SVC(C=1,kernel='rbf',gamma=100)
svc100.fit(X,y.flatten())
print(svc100.score(X,y.flatten()))
plot_boundary(svc100)
plot_data()
score = 0.9976825028968713
图像:
gamma=1000
score = 1
图像:
可以看出,gamma越大,模型复杂度越高,与图像拟合的越好
6、寻找最优参数C与gamma:下一篇