# -*- coding: utf-8 -*-
import random
from numpy import *
def loadSet(filename):
fr=open(filename)
trainSet=[]
trainLabel=[]
for line in fr.readlines():
currLine=line.strip().split('\t')
trainSet.append([float(currLine[0]),float(currLine[1])])
trainLabel.append(float(currLine[2]))
return trainSet,trainLabel
#选择i,j。选择两个不同的alpha,SMO每次优化选择两个不同的alpha
#给定一个alpha(i),寻找另一个alpha(j)
def selectJrand(i,m):
j=i
while(j==i):
j=int(random.uniform(0,m))
return j
#调整大于H或者小于L的alph值
def clipAlpha(a,H,L):
if a>H:
a=H
if a<L:
a=L
return a
import random
from numpy import *
def loadSet(filename):
fr=open(filename)
trainSet=[]
trainLabel=[]
for line in fr.readlines():
currLine=line.strip().split('\t')
trainSet.append([float(currLine[0]),float(currLine[1])])
trainLabel.append(float(currLine[2]))
return trainSet,trainLabel
#选择i,j。选择两个不同的alpha,SMO每次优化选择两个不同的alpha
#给定一个alpha(i),寻找另一个alpha(j)
def selectJrand(i,m):
j=i
while(j==i):
j=int(random.uniform(0,m))
return j
#调整大于H或者小于L的alph值
def clipAlpha(a,H,L):
if a>H:
a=H
if a<L:
a=L
return a
#简化版的SMO算法
#C是松弛变量
#toler是容错率
#maxIter是最大迭代次数,外循环的最大循环数
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):
#用于记录alp是否已经优化
alphaPairsChanged=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(alphas[i]<C))or\
((labelMat[i]*Ei>toler)and alphas[i]>0):
#C是松弛变量
#toler是容错率
#maxIter是最大迭代次数,外循环的最大循环数
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):
#用于记录alp是否已经优化
alphaPairsChanged=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(alphas[i]<C))or\
((labelMat[i]*Ei>toler)and alphas[i]>0):