|
报错的代码部分: def isSatisfyKKT(self, i):
gxi =self.calc_gxi(i)
yi = self.trainLabelMat
#判断依据参照“7.4.2 变量的选择方法”中“1.第1个变量的选择”
#式7.111到7.113
#--------------------
#依据7.111
if (math.fabs(self.alpha) < self.toler) and (yi * gxi >= 1):
return True
#依据7.113
elif (math.fabs(self.alpha - self.C) < self.toler) and (yi * gxi <= 1):
return True
#依据7.112
elif (self.alpha > -self.toler) and (self.alpha < (self.C + self.toler)) \
and (math.fabs(yi * gxi - 1) < self.toler):
return True
else:
return False
def train(self, iter = 100):
iterStep = 0; parameterChanged = 1
while (iterStep < iter) and (parameterChanged > 0):
#打印当前迭代轮数
print('iter:%d:%d'%( iterStep, iter))
#迭代步数加1
iterStep += 1
#新的一轮将参数改变标志位重新置0
parameterChanged = 0
#大循环遍历所有样本,用于找SMO中第一个变量
for i in range(self.m):
#查看第一个遍历是否满足KKT条件,如果不满足则作为SMO中第一个变量从而进行优化
if self.isSatisfyKKT(i) is not True:
E1 = self.calcEi(i)
#选择第2个变量
E2, j = self.getAlphaJ(E1, i)
#参考“7.4.1两个变量二次规划的求解方法” P126 下半部分
#获得两个变量的标签
y1 = self.trainLabelMat
y2 = self.trainLabelMat[j]
#复制α值作为old值
alphaOld_1 = self.alpha
alphaOld_2 = self.alpha[j]
#依据标签是否一致来生成不同的L和H
...
if __name__ == '__main__':
# 开始训练
print('start to train')
svm.train()
但运行结果出错:[size=13.0667px]Traceback (most recent call last): File "D:/code/pycharm/dingwei.py", line 400, in <module> svm.train() File "D:/code/pycharm/dingwei.py", line 241, in train if self.isSatisfyKKT(i) is not True: File "D:/code/pycharm/dingwei.py", line 112, in isSatisfyKKT if (math.fabs(self.alpha) < self.toler) and (yi * gxi >= 1):ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()[size=13.0667px]
[size=13.0667px]
[size=13.0667px]请问一下该怎么改
|
|