主体是书上的程序,添加了一个画图函数,查看分类结果。实际上,按照书上的程序,分类结果并不一定好。书上图6-4只是理想结果。程序后附上结果。
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 15 10:26:20 2018
@author: ###
"""
import numpy as np
import matplotlib.pyplot as plt
def loadDataSet(filename):
dataMat=[]
labelMat=[]
fr =open(filename)
for line in fr.readlines():
lineArr=line.strip().split('\t')
dataMat.append([float(lineArr[0]),float(lineArr[1])])
labelMat.append(float(lineArr[2]))
return dataMat,labelMat
def selectJrand(i,m):
j=i;
while(j==i):
j=int(np.random.uniform(0,m))
return j
def clipAlpha(aj,H,L):
'''
限制函数
'''
if aj>H:
aj=H
if L>aj:
aj=L
return aj
def smoSimple(dataMatIn,classLabels,C,toler,maxIter):
'''
简化版SMO函数
输入:数据集、标签集、惩罚常数C、容错率、最大迭代次数
numpy.multiply(),数组点乘
'''
#将列表转为矩阵,labelMat进行转置,使数据集每行与标签集每行相对应
dataMatrix=np.mat(dataMatIn)
labelMat=np.mat(classLabels).transpose()
b=0
m,n=np.shape(dataMatrix)
alphas=np.mat(np.zeros((m,1)))
iter