机器学习实战之支持向量机

1. 基本定义

(1)分隔超平面: 分类的决策边界,分布在超平面一侧的所有数据都属于某个类别, 分布在另一测的所有数据则属于另一个类别.

(2) 间隔: 样本点到分割面的距离; 在训练过程中, 希望间隔尽可能大, 因为如果我们犯错或者在有限数据上训练分类器的话,希望分类器尽可能健壮.

(3) 支持向量: 离分割超平面最近的那些点.

2. svm

(1) 支持向量机是一个二类分类器;类别标签采用-1和+1而不是0/1的原因: -1和+1只有符号不一样的区别,方便数学上的处理,可以通过一个统一公式来表示间隔或者数据点到分隔超平面的距离:label*(wx+b);

(2) 松弛变量:允许有些数据点可以处于分\隔面的错误一侧.

(3) 常数C用于控制"最大化间隔"和"保证大部分点的函数间隔小于1.0"这两个目标的权重.

(4) svm的关键是求解alpha(0<=alpha<=C)

(5) SMO(sequential minimal optimization)算法是将大优化问题分解为多个小优化问题来求解.SMO的目标就是求出一系列alpha和b,然后计算得到权重向量w,最终得到分隔超平面.

其工作原理: 每次循环中选择两个alpha进行优化处理.一旦找到一对合适的alpha,那么就增大一个同时减小一个.合适指的是满足一下2个条件:1.这两个alpha必须在间隔边界之外;2.这两个alpha没有进行过区间化处理或者不在边界上.

3. 简化版smo算法

(1)简化点:SMO算法应该要确定要优化的最佳alpha对,简化版跳过这一项,首先在数据集上遍历没一个alpha,然后在剩下的alpha集合中随机选择另一个alpha,从而构成alpha对.

(2)SMO函数伪代码

创建一个alpha向量并将其初始化为0向量

当迭代次数小于最大迭代次数时(外循环):

         对数据集中的每个数据向量(内循环):

                    如果该数据向量可以被优化:

                             随机选择另外一个数据向量,同时优化这两个向量

                             若两个向量都不能被优化,退出内循环

          如果所有向量都没被优化,增加迭代次数,继续下一次循环

实现代码如下:

#produce a random different from i in interval[0,m]
#i是地一个alpha的下标,m是所有alpha的数目,函数随机产生一个不是i的下标,作为j
def selectRand(i,m):
	j = i
	while (j==i):
		j = int(random.uniform(0,m))
	return j

#adjust the value of alpha
#调整大于H或小于L的alpha值 
def clipAlpha(aj,H,L):
	if aj > H:
		aj = H
	if aj < L:
		aj = L
	return aj

#输入参数分别是数据集\类别标签\常熟C\容错率\退出前的最大循环次数
def smoSimple(dataMatIn,classLabels,C,toler,maxIter):
	dataMatrix = mat(dataMatIn)
	labelMatrix 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值