机器学习笔记-SVM算法与代码实现

机器学习笔记-SVM算法

1. SVM算法原理

SVM算法的引入

使用现行分类器将两类数据进行数据分类时,应如何选取采用的分类器?考虑到使分类器的效果具有更强的鲁棒性,最佳的线性分类器在选择是能保证满足条件——

距离分割线最近的点到分割线的距离最远

此时,样本的分割线将被极少数的几个点确定,并且距离分割线越远的分类具有越高的准确性;同时,在距离分割线较近的空间内存在的模糊点将获得更高的容错判断空间,有着更高的容错率。

SVM算法的形式化

若将分类的两种样本属性分别标注为1和-1,则可以使用f(x)=w^t·x+b=0用来表示分割超平面。(分割超平面总是比当前属性维度少一个维度),分割之后,满足超平面的正样本一侧满足f(x)>=1,负样本一侧的所有样本满足f(x)<=-1,将这个性质统一进行分析判断之后可得
y·f(x)>=1
定义所有距离超平面最近的数据样本点为支持向量,根据之前的论述可知,超平面是仅有距离最近的样本点(支持向量)确定的。
进一步进行分析可知,寻找最优分割超平面的目的是使支持向量对应有最大的间隔,由数学知识可得,求支持向量的最大间隔可等效为:
max 1/||w|| = min 0.5 ||w||^2
因此得到寻找最佳分割超平面的问题转化为:
** min 0.5 ||w||^2 s.t. y·f(x)>=1**
并进一步进行分析求SVM算法即可

2.SVM算法描述

①序列最小优化算法(SVO)

输入:训练数据集合D={(x1,y1)…(xm,ym)}
       参数C
       初始化参数集合 αi=0,b=0
过程描述:

bool flag 遍历整个数据集是否完成的指示变量
int countChange 记录每次循环之后发生改变的α对
int max 最大迭代次数
伪代码展示

while 循环次数<max & (countChange>0 or flag==1):
	if flag==1:
		for ai in range:
			F(1)算法:寻找适合与ai一起更新的aj,并同时更新αi,αj,b;若果有对α对的更新,countChange++
	else:
		找到所有不为0和C的集合{αi}
			for α in {αi}:
				F(1)算法:寻找最适合与αi一起更新的αj,并同时更新αi,αj,b;若果有对α对的更新,countChange++
	if flag ==1:
		flag =0
	else if countChange ==0:
		flag=1
return

上述算法中的F(1)算法描述的是一个内循环算法,主要的功能是在已知需要更新的αi的情况下找到适合与之一同更新的αj,并同时更新αi和αj。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值