SVM
来源:互联网 发布:以前很火的网络歌曲 编辑:程序博客网 时间:2024/06/05 03:01
支持向量机
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]))
- SVM
- SVM
- SVM
- svm
- svm
- svm
- svm
- SVM
- SVM
- SVM
- SVM
- svm
- SVM
- SVM
- SVM
- SVM
- SVM
- SVM
- List集合
- Android之线程池ThreadPoolExecutor简介(面试)
- Loi Online Judge 1004 文明膜蛤
- python批量重命名文件
- UVA-11609-Teams-组合计数
- SVM
- |NOIOJ|动态规划|9267:核电站
- C++实现队列
- Flexbox布局指南
- 3-3 构造函数的调用(高级)
- Android--day03--Button 简单音乐播放器
- 单片机系统
- |NOIOJ|动态规划|9268:酒鬼
- 贝叶斯思维——chapter3(估计)