def runSimpleSMO(): dataArray,labelArray = svm.loadDataSet('testSet.txt') b,alphas = svm.smoSimple(dataArray,labelArray,0.6,0.001,40) print b print alphas[alphas>0] print shape(alphas[alphas>0])[1] #得到支持向量的个数 for i in range(100): #获得支持向量的坐标数据,和类别 if alphas[i]>0.0: print dataArray[i],labelArray[i]
def test_2(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) print "b" print b print "alphas" print alphas print ">0" print alphas[alphas > 0]
labelMat = mat(labelArr).transpose() m, n = shape(datMat) for i in range(m): kernelEval = kernelTrans(sVs, datMat[i, :], kTup) predict = kernelEval.T * multiply(labelSV, alphas[svInd]) + b if sign(predict) != sign(labelArr[i]): errorCount += 1 print("the test error rate is: %f" % (float(errorCount) / m)) if __name__ == "__main__": import svmMLiA dataArr, labelArr = svmMLiA.loadDataSet('testSetSVM.txt') print("dataArr:\n", dataArr) print("labenlArr:\n", labelArr) b, alphas = svmMLiA.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) print("\nb:\n", b, "\nalphas:\n", alphas[alphas > 0]) #alphas[alphas>0], only can be used in numpy print("\nshape of alphas>0:\n", shape(alphas[alphas > 0])) for i in range(100): if alphas[i] > 0.0: print(dataArr[i], labelArr[i]) # b,alphas = svmMLiA.smoPK(dataArr,labelArr,0.6,0.001,40) # print("\nb2:\n", b, "\nalphas2:\n", alphas[alphas > 0]) # alphas[alphas>0], only can be used in numpy # # ws=svmMLiA.calcWs(alphas,dataArr,labelArr) # print("\nws:\n",ws) # dataMat=mat(dataArr) # print("datMat[i]: ",dataMat[2]*mat(ws)+b)
from numpy import * import matplotlib.pyplot as plt from matplotlib.patches import Circle import svmMLiA xcord0 = [] # 类别0的x坐标 ycord0 = [] # 类别0的y坐标 xcord1 = [] # 类别1的x坐标 ycord1 = [] # 类别1的y坐标 markers = [] colors = [] dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') C = 0.6 b, alphas = svmMLiA.smoSimple(dataArr, labelArr, C, 0.001, 40) b = float(b) # 支持向量的坐标 xSupportVectors = [] ySupportVectors = [] alphaSupportVectors = [] # 支持向量对应的非零alpha labelSupportVectors = [] featureDatasSupportVectors = [] # 支持向量的原始数据 for i in range(0, alphas.__len__()): if alphas[i] > 0: print i, ":", alphas[i] alphaSupportVectors.append(float(alphas[i])) labelSupportVectors.append(int(labelArr[i])) xSupportVectors.append(dataArr[i][0]) ySupportVectors.append(dataArr[i][1]) featureDatasSupportVectors.append(dataArr[i])
#!/usr/bin/env python # -*- coding: utf-8 -*- # author:yiluzhang import svmMLiA if __name__ == '__main__': # 简化版smo测试 data_arr, label_arr = svmMLiA.loadDataSet('testSet.txt') # print(data_arr[:5]) # print(label_arr[:5]) w_t, b, alpha = svmMLiA.smoSimple(data_arr, label_arr, 0.6, 0.001, 40) svmMLiA.smo_simple_plt(data_arr, w_t, b) print(b)
import svmMLiA as SVM dataArr, labelArr = SVM.loadDataSet('data/testSet.txt') b, alphas = SVM.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) """ output: iteration number: 29 j not moving enough iteration number: 30 iter: 30 i:17, pairs changed 1 j not moving enough iteration number: 0 j not moving enough iteration number: 1 b: matrix([[-3.8486163]]) alphas[alphas>0] = matrix([[0.09313378, 0.27456007, 0.04445935, 0.3232345 ]]) """ # To see which points of our dataset are support vectors for i in range(100): if alphas[i] > 0.0: print(dataArr[i], labelArr[i]) """ output: [4.658191, 3.507396] -1.0 [3.457096, -0.082216] -1.0 [2.893743, -1.643468] -1.0 [6.080573, 0.418886] 1.0
# -*- coding: utf-8 -*- from numpy import * import svmMLiA dm, ls = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoSimple(dm, ls, 0.6, 0.001, 40) # 简版smo算法 alphas[alphas > 0] shape(alphas[alphas > 0]) svMat = [] for i in range(100): if alphas[i] > 0.0: svMat.append(dm[i]) print dm[i], ls[i] # 支持向量 svmMLiA.plot(dm, ls, svMat) import svmMLiA dm, ls = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoP(dm, ls, 0.6, 0.001, 40) ws = svmMLiA.calcWs(alphas, dm, ls) mat(dm)[0] * mat(ws) + b # 对第0个数据分类 ls[0] import svmMLiA dm, ls = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoP(dm, ls, 0.6, 0.001, 40) svMat = [] for i in range(100): if alphas[i] > 0.0: svMat.append(dm[i])
import svmMLiA from numpy import * import matplotlib.pyplot as plt dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') # print(labelArr) #[-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0,...] b, alphas = svmMLiA.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) #数据集,类别标签,常数C,容错率,退出前最大的循环次数 print('martix b:', b) am, an = shape(alphas) print('am:', am, ',an:', an) print('martix alphas:', alphas[alphas > 0]) print('支持向量的个数:', shape(alphas[alphas > 0])) for i in range(100): if alphas[i] > 0.0: print('这些点是支持向量:', dataArr[i], labelArr[i]) #output: # martix b: [[-3.79474649]] # am: 100 ,an: 1 # martix alphas: [[ 0.11482438 0.1309357 0.11348042 0.08434201 0.27489848]] # 支持向量的个数: (1, 5) # 这些点是支持向量: [4.658191, 3.507396] -1.0 # 这些点是支持向量: [3.457096, -0.082216] -1.0 # 这些点是支持向量: [2.893743, -1.643468] -1.0 # 这些点是支持向量: [5.286862, -2.358286] 1.0 # 这些点是支持向量: [6.080573, 0.418886] 1.0 ws = svmMLiA.calcWs(alphas, dataArr, labelArr) x0 = [] y0 = [] x1 = [] y1 = []
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]
def test_smo_simple(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) print(b) print(alphas[alphas > 0])
def test_3(): dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt') b, alphas = svmMLiA.smoSimple(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]