MCPcopy
hub / github.com/apachecn/ailearning / selectJ

Function selectJ

src/python/6.SVM/svm-complete.py:127–182  ·  view source on GitHub ↗

selectJ(返回最优的j和Ej) 内循环的启发式方法。 选择第二个(内循环)alpha的alpha值 这里的目标是选择合适的第二个alpha值以保证每次优化中采用最大步长。 该函数的误差与第一个alpha值Ei和下标i有关。 Args: i 具体的第i一行 oS optStruct对象 Ei 预测结果与真实结果比对,计算误差Ei Returns: j 随机选出的第j一行 Ej 预测结果与真实结果比对,计算误差Ej

(i, oS, Ei)

Source from the content-addressed store, hash-verified

125
126
127def selectJ(i, oS, Ei): # this is the second choice -heurstic, and calcs Ej
128 """selectJ(返回最优的j和Ej)
129
130 内循环的启发式方法。
131 选择第二个(内循环)alpha的alpha值
132 这里的目标是选择合适的第二个alpha值以保证每次优化中采用最大步长。
133 该函数的误差与第一个alpha值Ei和下标i有关。
134 Args:
135 i 具体的第i一行
136 oS optStruct对象
137 Ei 预测结果与真实结果比对,计算误差Ei
138
139 Returns:
140 j 随机选出的第j一行
141 Ej 预测结果与真实结果比对,计算误差Ej
142 """
143 maxK = -1
144 maxDeltaE = 0
145 Ej = 0
146 # 首先将输入值Ei在缓存中设置成为有效的。这里的有效意味着它已经计算好了。
147 oS.eCache[i] = [1, Ei]
148
149 # print 'oS.eCache[%s]=%s' % (i, oS.eCache[i])
150 # print 'oS.eCache[:, 0].A=%s' % oS.eCache[:, 0].A.T
151 # """
152 # # 返回非0的:行列值
153 # nonzero(oS.eCache[:, 0].A)= (
154 # 行: array([ 0, 2, 4, 5, 8, 10, 17, 18, 20, 21, 23, 25, 26, 29, 30, 39, 46,52, 54, 55, 62, 69, 70, 76, 79, 82, 94, 97]),
155 # 列: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0])
156 # )
157 # """
158 # print 'nonzero(oS.eCache[:, 0].A)=', nonzero(oS.eCache[:, 0].A)
159 # # 取行的list
160 # print 'nonzero(oS.eCache[:, 0].A)[0]=', nonzero(oS.eCache[:, 0].A)[0]
161 # 非零E值的行的list列表,所对应的alpha值
162 validEcacheList = nonzero(oS.eCache[:, 0].A)[0]
163 if (len(validEcacheList)) > 1:
164 for k in validEcacheList: # 在所有的值上进行循环,并选择其中使得改变最大的那个值
165 if k == i:
166 continue # don't calc for i, waste of time
167
168 # 求 Ek误差:预测值-真实值的差
169 Ek = calcEk(oS, k)
170 deltaE = abs(Ei - Ek)
171 if (deltaE > maxDeltaE):
172 # 选择具有最大步长的j
173 maxK = k
174 maxDeltaE = deltaE
175 Ej = Ek
176 return maxK, Ej
177 else: # 如果是第一次循环,则随机选择一个alpha值
178 j = selectJrand(i, oS.m)
179
180 # 求 Ek误差:预测值-真实值的差
181 Ej = calcEk(oS, j)
182 return j, Ej
183
184

Callers 1

innerLFunction · 0.70

Calls 2

calcEkFunction · 0.70
selectJrandFunction · 0.70

Tested by

no test coverage detected