Ejemplo n.º 1
0
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]
Ejemplo n.º 2
0
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]
Ejemplo n.º 3
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])
Ejemplo n.º 5
0
#!/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)
Ejemplo n.º 6
0
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
Ejemplo n.º 7
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 = []
Ejemplo n.º 9
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]
Ejemplo n.º 10
0
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])
Ejemplo n.º 11
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]