机器学习基础(八)—支持向量机代码实战

1 SVM最大间距回顾:

  • 设SVM找到的决策边界函数为:f(x)=wTx+b(其中w就相当于Logistic回归当中的θ1、θ2…,b就是θ0)。当f(x)=0时就代表样本点在决策边界线上。如下图所示当f(x)<-1时就是负样本,f(x)>1时就是正样本,因此可见f(x)描述了一个样本点到决策边界线上的距离。
    在这里插入图片描述

  • 为什么SVM被称为最大间距分类器呢?

  • 首先要搞清楚样本点到决策边界线f(x)=0的距离如何表示,上面我们已经谈到了,f(x)可以用来表示样本点到决策边界线的距离。那么要求间距也就时求min r (r=f(x)),也就是离决策边界线最近的点到决策边界线的距离。但是这样时不合理的,因为若等比的放大w和b,那么f(x)也就会被等比的放大。

  • 假设有一个样本点x,x0为x做垂直于决策边界线的直线的交点。r为x到决策边界线的距离,w为垂直于决策边界的向量。
    在这里插入图片描述

在这里插入图片描述

  • 又因为我们的目标是寻找最大间距,所以问题就转化为了求max r’。有因为有约束条件y(wTx+b)>1(即f(x)的绝对值大于1),所以问题就转化为了寻找最小的w。
  • 下面就可以看到支持向量机为什么又叫最大间隔分类器了。
  • 假设我们的决策边界线为下图下左半部分的绿色线,此时我们的p(间距)是非常小的,那么在约束条件下,我们要使得我们的θ(即w)足够的大。这就和我们的目标相冲突了。
  • 如果我们是右边的那条边界,此时p(间距)就大多了,因此我们的θ就可以变小了,从而也就达到了我们本来的目标。这就是为什么要找最大间距。

在这里插入图片描述

2 寻找最优参数:

  • 首先读取数据,绘制图像
import numpy as np
import scipy.io as sio
import scipy.optimize as opt
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def loadData():
    d = sio.loadmat('E:/Data/Ng/Coursera-ML-AndrewNg-Notes-master/code/ex5-bias vs variance/ex5data1.mat')
    return map(np.ravel,[d['X'],d['y'],d['Xval'],d['yval'],d['Xtest'],d['ytest']])

if __name__=='__main__':
	X, y, Xval, yval, Xtest, ytest = loadData()
	X,Xval,Xtest = [np.insert(x.reshape(x.shape[0],1),0,values = np.ones(x.shape[0]),axis=1) for x in (X,Xval,Xtest)] #批量加人为全为1的列
	plt.figure(figsize = (10,10),dpi=70)
    plt.scatter(X,y,s=20,color = 'red')
    plt.show()

在这里插入图片描述

  • 计算出最优θ
def cost(theta,X,y):
    m = X.shape[0]
    inner = X @theta - y #(12,1)
    square_sum = inner.T @inner
    cost = square_sum/(2*m<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值