SVM --从 原理 到实现

本文介绍了如何从零开始实现支持向量机(SVM)。通过讲解SVM的基本原理,引用优质博客资源,并详细阐述了采用SMO算法进行优化的过程。最后展示了在DML框架中实现SVM的代码片段及测试结果。
摘要由CSDN通过智能技术生成
               

零.

        本文所有代码均能在我 github上的 DML 找到,顺便求点Star

一.引入

        从一开始接触机器学习,就感觉SVM(支持向量机 Support Vector Machine)就是高端大气上档次的代名词啊,在深度学习出来之前一直都力压ANN一头,是应用得最好的算法了,本文借着实现DML的机会实现一下。


二.原理

       SVM的文章先不说论文和书啦,博文也是不少,所以我觉得实在不用在这里赘述这些了,这是标题里原理打引号的原因……

       现推荐这些博客里讲的SVM,我认为写得是极好的:

                     JerryLead 的五篇  很好理解

                     july的博客,还是那啥的风格,大长篇……事实上我没看完这个…只是觉得挺全的


       除此之外还可以去看看《统计学习方法》的内容


三.过程.

       接下来讲一下我选择实现的SOM的基本过程吧:

       SMO是(Sequential minimal optimization),其优化过程就是每次选取两个优化变量α(i)和α(j),然后更新α,直到满足停机条件为止:

       我基本上是按照《统计学习方法》来实现的,所以也就直接贴一下这上面的过程:

      

         至于alpha的选择,第一个变量的选择是要选择违反KKT条件的:

         

          代码的这里不是直接这样实现的,因为用了Ei,为了方便形式有所改变,但你可以推一下是没问题的:

         第二个变量的选择是选择使|Ei-Ej|最大的,然后按照一定的规则计算和更新就行了


四.实现与测试

        这是DML/SVM/svm.py

from __future__ import divisionimport numpy as npimport scipy as spfrom dml.tool import signimport matplotlib.pyplot as pltfrom numpy.random import randomimport random as rdclass SVMC: def Gauss_kernel(x,z,sigma=2):  return np.exp(-np.sum((x-z)**2)/(2*sigma**2)) def Linear_kernel(x,z):  return np.sum(x*z) def __init__(self,X,y,C=1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值