def testRbf(k1=100): dataArr,labelArr = svm.loadDataSet('../data/test1.txt') dataMat = mat(dataArr) #print dataMat b,alphas = svm.smoP(dataArr, labelArr, 200, 0.01, 10000, ('rbf', k1)) #C=200 important datMat=mat(dataArr); labelMat = mat(labelArr).transpose() #print alphas.A>0 svInd=nonzero(alphas.A>0)[0] sVs=datMat[svInd] #get matrix of only support vectors #print dataMat #ax.scatter(sVs[:,0], sVs[:,1], s=30, c='green', marker='s') #ax.scatter(sVs[:,0], sVs[:,1]) labelSV = labelMat[svInd]; print "there are %d Support Vectors" % shape(sVs)[0] m,n = shape(datMat) errorCount = 0 for i in range(m): kernelEval = svm.kernelTrans(sVs,datMat[i,:],('rbf', k1)) predict=kernelEval.T * multiply(labelSV,alphas[svInd]) + b if sign(predict)!=sign(labelArr[i]): errorCount += 1 print "the training error rate is: %f" % (float(errorCount)/m) dataArr,labelArr = svm.loadDataSet('../data/test2.txt') errorCount = 0 datMat=mat(dataArr); labelMat = mat(labelArr).transpose() m,n = shape(datMat) fig = plt.figure() ax = fig.add_subplot(111) #print sVs for i in range(m): kernelEval = svm.kernelTrans(sVs,datMat[i,:],('rbf', k1)) predict=kernelEval.T * multiply(labelSV,alphas[svInd]) + b if sign(predict)!=sign(labelArr[i]): errorCount += 1 if sign(predict) > 0: #c = [int((0.2/float(predict))) for cc in range(0, 60)] #ax.scatter(range(0, 60), array(datMat[i,:]), array(c), array(c)) ax.scatter(range(0, 60), array(datMat[i,:]), s=20, c='green', marker='s') #print datMat[i,:], sign(predict), sign(labelArr[i]) continue else: ax.scatter(range(0, 60), array(datMat[i,:]), s=20, c='red', marker='s') #print datMat[i,:], sign(predict), sign(labelArr[i]) continue for i in range(shape(sVs)[0]): ax.scatter(range(0, 60), array(sVs[i]), s=10, c='yellow', marker='s') continue plt.show() print "the test error rate is: %f" % (float(errorCount)/m)
import svmMLiA from numpy import * dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoP(dataArr, labelArr, 0.6, 0.001, 40) ws = svmMLiA.calcWs(alphas, dataArr, labelArr) print ws datMat = mat(dataArr) print datMat[0]*mat(ws)+b print labelArr[0] print datMat[1]*mat(ws)+b print labelArr[1] print datMat[2]*mat(ws)+b print labelArr[2]
import svmMLiA dataMat, labelMat = svmMLiA.loadDataSet( "E:\Desktop\machinelearninginaction\Ch06/testSet.txt") print dataMat print labelMat b, alphas = svmMLiA.smoSimple(dataMat, labelMat, 0.6, 0.001, 40) print b print alphas[alphas > 0] for i in range(100): if alphas[i] > 0.0: print dataMat[i], labelMat[i]
#!/usr/bin/env python3 # -*- coding: utf-8 -*- '6.4 machine learning in action' __author__ = 'lxp' import svmMLiA import numpy as np dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoPNew(dataArr, labelArr, 0.6, 0.001, 40) ws = svmMLiA.calcWs(alphas, dataArr, labelArr) datMat = np.mat(dataArr) ''' i = input("要检验的数据编号\n") print(datMat[0] * np.mat(ws) + b) print(labelArr[0]) ''' count = 0 m = np.shape(dataArr)[0] for i in range(m): if np.sign(datMat[i] * np.mat(ws) + b) != labelArr[i]: count += 1 print(count / m)
i, :] * oS.X[i, :].T - oS.labelMat[j] * ( oS.alphas[j] - alphaJold) * oS.X[i, :] * oS.X[j, :].T b2 = oS.b - Ej - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.X[ i, :] * oS.X[j, :].T - oS.labelMat[j] * ( oS.alphas[j] - alphaJold) * oS.X[j, :] * oS.X[j, :].T if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): oS.b = b1 elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2 else: oS.b = (b1 + b2) / 2.0 return 1 else: return 0 '''data & parameter''' filename = 'testSet.txt' dataMatIn, classLabels = loadDataSet(filename) toler = 0.001 C = 0.6 maxIter = 40 '''PlattSMO算法''' #def smoP(dataMatIn, classLabels, C, toler, maxIter): #full Platt SMO oS = optStruct(mat(dataMatIn), mat(classLabels).transpose(), C, toler) iter = 0 entireSet = True alphaPairsChanged = 0 while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)): alphaPairsChanged = 0 if entireSet: #go over all for i in range(oS.m): alphaPairsChanged += innerL(i, oS) print("fullSet, iter: %d i:%d, pairs changed %d" %
def test_smo_all(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoP(dataArr, labelArr, 0.6, 0.001, 40) print(b) print(alphas[alphas > 0])
def test_4(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoP(dataArr, labelArr, 0.6, 0.001, 40) print shape(alphas[alphas > 0]) for i in range(100): if alphas[i] > 0.0: print dataArr[i], labelArr[i]
def test_1(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') print labelArr