Esempio n. 1
0
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]
Esempio n. 3
0
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]
Esempio n. 4
0
#!/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)
Esempio n. 5
0
            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" %
Esempio n. 6
0
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])
Esempio n. 7
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]
Esempio n. 8
0
def test_1():
    dataArr, labelArr = svmMLiA.loadDataSet('testSet.txt')
    print labelArr