MCPcopy Index your code
hub / github.com/Dod-o/Statistical-Learning-Method_Code / calc_gxi

Method calc_gxi

SVM/SVM.py:147–174  ·  view source on GitHub ↗

计算g(xi) 依据“7.101 两个变量二次规划的求解方法”式7.104 :param i:x的下标 :return: g(xi)的值

(self, i)

Source from the content-addressed store, hash-verified

145 return False
146
147 def calc_gxi(self, i):
148 '''
149 计算g(xi)
150 依据“7.101 两个变量二次规划的求解方法”式7.104
151 :param i:x的下标
152 :return: g(xi)的值
153 '''
154 #初始化g(xi)
155 gxi = 0
156 #因为g(xi)是一个求和式+b的形式,普通做法应该是直接求出求和式中的每一项再相加即可
157 #但是读者应该有发现,在“7.2.3 支持向量”开头第一句话有说到“对应于α>0的样本点
158 #(xi, yi)的实例xi称为支持向量”。也就是说只有支持向量的α是大于0的,在求和式内的
159 #对应的αi*yi*K(xi, xj)不为0,非支持向量的αi*yi*K(xi, xj)必为0,也就不需要参与
160 #到计算中。也就是说,在g(xi)内部求和式的运算中,只需要计算α>0的部分,其余部分可
161 #忽略。因为支持向量的数量是比较少的,这样可以再很大程度上节约时间
162 #从另一角度看,抛掉支持向量的概念,如果α为0,αi*yi*K(xi, xj)本身也必为0,从数学
163 #角度上将也可以扔掉不算
164 #index获得非零α的下标,并做成列表形式方便后续遍历
165 index = [i for i, alpha in enumerate(self.alpha) if alpha != 0]
166 #遍历每一个非零α,i为非零α的下标
167 for j in index:
168 #计算g(xi)
169 gxi += self.alpha[j] * self.trainLabelMat[j] * self.k[j][i]
170 #求和结束后再单独加上偏置b
171 gxi += self.b
172
173 #返回
174 return gxi
175
176 def calcEi(self, i):
177 '''

Callers 2

isSatisfyKKTMethod · 0.95
calcEiMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected