找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3493|回复: 0

[求助] svm--李航 统计学习方法 网上的代码进行修改但是运行不了

2

主题

2

帖子

2

积分

贫民

积分
2
我不想秃头 发表于 2022-5-1 11:03:53 | 显示全部楼层 |阅读模式
报错的代码部分:    def isSatisfyKKT(self, i):

        gxi =self.calc_gxi(i)
        yi =
self.trainLabelMat

        
#判断依据参照“7.4.2 变量的选择方法“1.1个变量的选择
        #7.1117.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]
                    
#依据标签是否一致来生成不同的LH
                    ...
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]请问一下该怎么改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表