机器学习实战-第六章(支持向量机)
来源:互联网 发布:ug电极编程绘图 编辑:程序博客网 时间:2024/04/30 21:54
支持向量机详解:解密SVM系列 理解SVM的三层境界
1 拉格朗日乘子法(等式约束):
目标函数:
最优解条件:
2 kkt(不等式约束):
目标函数:
最优解条件:
3 SVM:
思想:在两类数据中间找一个超平面
目标函数:
kkt:
最优解条件:
把
此时问题由求最优的
4 加入松弛变量
目标函数:
ktt:
最优解条件:
把
此时问题由求最优的
5 SMO算法:
给定一组
但是这个超平面还不是最优的,相对于这个超平面,所有数据点可以分为3类:
现在就要根据
如何进行调整:
随机两个不满足ktt条件的为一组,由
具体值:
7 简易的SMO代码:
from numpy import *def loadDataSet(filename): dataSet = [];labels = [] fr = open(filename) for line in fr.readlines(): line = line.strip().split('\t') dataSet.append([float(line[0]),float(line[1])]) labels.append(float(line[2])) return dataSet,labelsimport randomdef selectJrand(i,m): j=i while(j==i): j = int(random.uniform(0,m)) return jdef clipAlpha(aj,H,L): if aj>H: aj = H if aj<L: aj = L return ajdef smoSimle(dataSet,labels,C,toler,maxIter): iter = 0 m,n = shape(dataSet) alphas = mat(zeros((m,1))) dataMat = mat(dataSet) labelsMat = mat(labels).transpose() b = 0 while(iter<maxIter): alphaPairsChanged = 0 for i in range(m): fXi = float(multiply(alphas,labelsMat).T*(dataMat*dataMat[i,:].T))+b Ei = fXi - float(labelsMat[i]) if ((labelsMat[i]*Ei<-toler) and (alphas[i]<C)) or ((labelsMat[i]*Ei>toler) and (alphas[i]>0)): j = selectJrand(i,m) fXj = float(multiply(alphas, labelsMat).T * (dataMat * dataMat[j, :].T)) + b Ej = fXj - float(labelsMat[j]) alphaIold = alphas[i].copy() alphaJold = alphas[j].copy() if (labelsMat[i]!=labelsMat[j]): L = max(0,alphas[j]-alphas[i]) H = min(C,C+alphas[j]-alphas[i]) else: L = max(0,alphas[i]+alphas[j]-C) H = min(C,alphas[i]+alphas[j]) if L == H: print 'L == H' continue eta = 2.0*dataMat[i,:]*dataMat[j,:].T-dataMat[i,:]*dataMat[i,:].T-dataMat[j,:]*dataMat[j,:].T if eta>=0: print 'eta>=0' continue alphas[j] -= labelsMat[j]*(Ei-Ej)/eta alphas[j] = clipAlpha(alphas[j],H,L) if (abs(alphas[j]-alphaJold)<0.00001): print 'j not moving enough!' continue alphas[i] += labelsMat[i]*labelsMat[j]*(alphaJold-alphas[j]) b1 = b-Ei-labelsMat[i]*(alphas[i]-alphaIold)*dataMat[i,:]*dataMat[i,:].T-labelsMat[j]*(alphas[j]-alphaJold)*dataMat[i,:]*dataMat[j,:].T b2 = b-Ej-labelsMat[i]*(alphas[i]-alphaIold)*dataMat[i,:]*dataMat[j,:].T-labelsMat[j]*(alphas[j]-alphaJold)*dataMat[j,:]*dataMat[j,:].T if ((0<alphas[i]) and (alphas[i]<C)): b = b1 elif ((0<alphas[j]) and (alphas[j]<C)): b = b2 else: b = (b1+b2)/2.0 alphaPairsChanged+=1 print "iter: %d i:%d, pairs changed %d" % (iter, i, alphaPairsChanged) if (alphaPairsChanged == 0): iter += 1 else: iter = 0 print "iteration number: %d" % iter return b, alphas
- 机器学习实战-第六章(支持向量机)
- 机器学习实战——第六章:支持向量机
- [完]机器学习实战 第六章 支持向量机(Support Vector Machine)
- 机器学习(周志华)_第六章 支持向量机
- 机器学习实战第六章支持向量机照葫芦画瓢算法实践
- 机器学习(周志华) 参考答案 第六章 支持向量机 6.9
- 机器学习(周志华) 参考答案 第六章 支持向量机
- [机器学习 - 周志华] - 第六章 支持向量机
- <机器学习>(周志华)读书笔记 -- 第六章 支持向量机
- 第六章 支持向量机--机器学习(周志华) 参考答案
- 机器学习实战之支持向量机
- 机器学习实战-支持向量机
- 机器学习实战 支持向量机
- 机器学习实战_06支持向量机
- 机器学习实战笔记-支持向量机
- 机器学习实战-6支持向量机
- 【机器学习实战】第6章 支持向量机
- 机器学习实战【5】(SVM-支持向量机)
- hibernate报错failed to lazily initialize a collection of role
- controller as vm的用法是为了区分
- 数据库连接池DBCP与C3P0详解
- JAX-WS Web Service -春秋航空销售部分接口使用
- 在PhpStorm中管理GitHub代码仓库的使用方法
- 机器学习实战-第六章(支持向量机)
- 如何使用Excel绘制甘特图
- Python---numpy(随机数)
- 欢迎使用CSDN-markdown编辑器
- java 内存之方法区详解
- android app增量更新
- js获取当前时间与传入的时间进行比较 格式yyyy-MM-dd hh:mm:ss
- windows+wireshark抓Android和ios http协议
- Spring 整合 Redis