简易版的SVM中,SMO算法中α的选择采取遍历且随机的方式,见http://blog.youkuaiyun.com/xiaonannanxn/article/details/52372085
优化版中,我们采取启发式方式选择,即αj选择max|Ei-Ej|,这样就可以让每次更新的步长更大,减少我们的迭代次数,更新上次的SVM.py
# coding:utf-8
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(filename):
dataMat = []
labelMat = []
fr = open(filename)
for line in fr.readlines():
lineArr = line.strip().split('\t')
dataMat.append([float(lineArr[0]), float(lineArr[1])])
labelMat.append(float(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 aj < L:
aj = L
return aj
def show(dataArr, labelArr, alphas, b):
for i in xrange(len(labelArr)):
if labelArr[i] == -1:
plt.plot(dataArr[i][0], dataArr[i][1], 'or')
elif labelArr[i] ==