MCPcopy Create free account
hub / github.com/Jack-Cherish/Machine-Learning / smoP

Function smoP

SVM/svm-digits.py:219–254  ·  view source on GitHub ↗

完整的线性SMO算法 Parameters: dataMatIn - 数据矩阵 classLabels - 数据标签 C - 松弛变量 toler - 容错率 maxIter - 最大迭代次数 kTup - 包含核函数信息的元组 Returns: oS.b - SMO算法计算的b oS.alphas - SMO算法计算的alphas

(dataMatIn, classLabels, C, toler, maxIter, kTup = ('lin',0))

Source from the content-addressed store, hash-verified

217 return 0
218
219def smoP(dataMatIn, classLabels, C, toler, maxIter, kTup = ('lin',0)):
220 """
221 完整的线性SMO算法
222 Parameters:
223 dataMatIn - 数据矩阵
224 classLabels - 数据标签
225 C - 松弛变量
226 toler - 容错率
227 maxIter - 最大迭代次数
228 kTup - 包含核函数信息的元组
229 Returns:
230 oS.b - SMO算法计算的b
231 oS.alphas - SMO算法计算的alphas
232 """
233 oS = optStruct(np.mat(dataMatIn), np.mat(classLabels).transpose(), C, toler, kTup) #初始化数据结构
234 iter = 0 #初始化当前迭代次数
235 entireSet = True; alphaPairsChanged = 0
236 while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)): #遍历整个数据集都alpha也没有更新或者超过最大迭代次数,则退出循环
237 alphaPairsChanged = 0
238 if entireSet: #遍历整个数据集
239 for i in range(oS.m):
240 alphaPairsChanged += innerL(i,oS) #使用优化的SMO算法
241 print("全样本遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged))
242 iter += 1
243 else: #遍历非边界值
244 nonBoundIs = np.nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0] #遍历不在边界0和C的alpha
245 for i in nonBoundIs:
246 alphaPairsChanged += innerL(i,oS)
247 print("非边界遍历:第%d次迭代 样本:%d, alpha优化次数:%d" % (iter,i,alphaPairsChanged))
248 iter += 1
249 if entireSet: #遍历一次后改为非边界遍历
250 entireSet = False
251 elif (alphaPairsChanged == 0): #如果alpha没有更新,计算全样本遍历
252 entireSet = True
253 print("迭代次数: %d" % iter)
254 return oS.b,oS.alphas #返回SMO算法计算的b和alphas
255
256
257def img2vector(filename):

Callers 1

testDigitsFunction · 0.70

Calls 2

optStructClass · 0.70
innerLFunction · 0.70

Tested by

no test coverage detected