1.代码
代码如下(示例):
#Python3.8
#@Time :2020/12/9
#@Software:Pycharm
#@Author :xuhaoyu
#@Filename:PlattSMO.p
from numpy import *
class optStruct:
def _init_(self,dataMatrixInput,classLabels,constantC,tolerance):
self.X = dataMatrixInput
self.labelMatrix = classLabels
self.constantC = constantC
self.tolerance = tolerance
self.m = shape(dataMatrixInput)[0]
self.alphas = mat(zeros((self.m,1)))
self.b = 0
self.eCache = mat(zeros((self.m,2)))
def selectJrand(alphaIndex,numberOfAlpha):
j = alphaIndex
while(j == alphaIndex):
j = int(random.uniform(0,numberOfAlpha))
return j
#用于调整alpha的值alpha大于highValue将highValue赋值给alpha,反之也赋值
def clipAlpha(alpha,highValue,lowValue):
if alpha > highValue:
alpha = highValue
if alpha < lowValue:
alpha = lowValue
return alpha
def loadDataSet(fileName):
dataMatrix = [] #数据矩阵列表
labelMatrix = [] #数据的标签tag列表
fileOpen = open(fileName)
for line in fileOpen.readlines(): #读取文件的每一行
#strip()函数将文件的首位空格去掉(默认参数)
#split()函数将每一行用'\t'作为分隔符,放到一个列表中
lineArray = line.strip().split('\t')
#append()函数用来在列表尾部追加元素(参数是一个元素,例如:元组,列表,等)
dataMatrix.append([float(lineArray[0]),float(lineArray[1])])
labelMatrix.append(float(lineArray[2]))
return dataMatrix,labelMatrix
def calcEk(oS,k):
fXk = float(multiply(oS.alphas,oS.labelMat).T*(oS.X*oS.X[k,:].T)) + oS.b
Ek = fXk - float(oS.labelMatrix[k])
return Ek
def selectJ(i,oS,Ei):
maxK