SVM

本文介绍了支持向量机(SVM)的基本原理及其优势,包括如何通过最大化间隔来进行分类,并讨论了针对大规模数据集的高效求解方法——序列最小优化(SMO)算法。SMO算法将大型优化问题分解成一系列易于解决的小问题。
部署运行你感兴趣的模型镜像

支持向量机


1.基于最大间隔分隔数据

优点:泛化错误率低。计算开销不大,结果易解释

缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题

使用数据:数值型和标称型数据


我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远


在这里仅仅简单介绍,更为详细的数学需要自己去专门的书籍中学习。


2 .求解(SMO)

SMO表示序列最小化(Sequential  Minimal Optimization。总体思想:将大优化问题分解为多个小优化问题来求解。这些小问题往往更易求解,并且对它们进行顺序求解的结果与将他们作为整体求解的结果一致。在结果相同时,SMO求解时间更短。

SMO算法的目标是求出一系列alpha和b,一旦求出了这些alpha,就很容易计算出权重向量w。

SMO的工作原理:每次循环中选择两个alpha进行优化处理。一旦找到一对合适(两个alpha必须要符合一定的条件,条件之一就是两个alpha必须要在间隔边界之外,另一个条件为这两个alpha还没有过区间化处理或者不在边界上)的alpha,那么就增大其中一个同时减小。


(1)SMO中的辅助函数

def loadDataSet(filename):

   dataMat=[];labelMat=[]

   fr =open(filename)

   for line in fr:

      lineArr=line.strip().split('\t')

      dataMat.append([lineArr[0] ,lineArr[1] ])

      labelMat.append(lineArr[2])

   return dataMat,labelMat


def selectJrand(i,m):

     j=i;

    while(j==i):

         j=int(random.uniform(0,m))

  return j

def clipAlpha(aj,H,L):

    if aj  > H:

          aj=H

    if  L>aj:

         aj=L

return aj


改简化版SMO的伪代码大致如下:

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

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

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

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

          随机选择另外一个数据向量

          同时优化这两个向量

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

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

   

def smoSimple(dataMatIn,classLabels,C,toler,maxIter):

      dataMatrix=mat(dataMatIn); labelMat=mat(classlabels).transpose()

      b=0;m,n=shape(dataMatrix)

      alphas=mat(zeros((m,1)))

      iter=0

      while(iter<maxIter):

              alphaParisChanged=0

              for i in range(m):

                    fXi= float( multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[ i, :].T))+b

                    Ei=fXi-float(labelMat[i])

                    if ((labelMat[i]*Ei<-toler) and (alpha[i]<C)) or ((labelMat[ i ]*Ei>toler) and (alphas[ i ]>0 ) ) :

                          j=selectJrand(i,m)

                          fXj=float(multiply(alphas[i]))



您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值