吴恩达-机器学习课后题06-SVM(支持向量机)2-线性不可分

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:下一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值