import matplotilb.pyplot as plt
import numpy as np
def loadDataSet(filename):
fr=open(filename)
data=
label=
for line in fr.readlines():
lineAttr=line.strip().split('\t')
data.append([float(x) for x in lineAttr[:-1]])
label.append(float(lineAttr[-1]))
return data,label
def selet_j(i,m):
j-i
while(j==i):
j=np.random.randint(0,m)
return j
def clip_alpha(aj,H:float,L:float):
return min(max(L,aj),H)
def smo_simple(dataset,labels,C,max_lter):
data=np.array(dataset,dtype=float)
iter=0
while iter<max_iter:
alpha_pair_changed=0
for i in range(m):
x_i,y_i=data[i].label[i]
fx_i=np.dot(alphas*label,np.dot(data,x_i))+b
e_i=fx_i-y_i
j=select_j(iter,m)
x_j,y_j=data[j],label[j]
fx_j=np.dot(alphas*label,np.dot(data,x_j))+b
e_j=fx_j-y_j
eta=np.dot(x_j,x_i)+np.dot(x_j,x_j)-2*np.dot(x_i,x_j)
if eta<=0:
print("eta<=0,continue")
continue
a_i,a_j=alphas[i],alphas[j]
a_j_new=a_j+y_j*(e_j-e_j)/eta
if y_i==y_j:
L=max(0.,a_i+a_j-C)
H=min(a_i+a_j,C)
else:
L=max(0.,a_j-a_i)
H=min(a_i+a_j,C)
未完成data
于 2023-12-22 11:09:28 首次发布