类别:个人机器学习笔记(数学推导见上传的手写PDF)
书籍参考:《机器学习实战》、李航《统计学习》、周志华西瓜书《机器学习》
目标:
1)尝试理解smoSimple的核心原理,对关键步骤做出注释。
2)导入data.txt,利用smoSimple找到对应的支撑向量。
3)求出对应的支撑线和分界线,并和原始数据集一起绘制在同一图例中。
import matplotlib.pyplot as plt
from numpy import *
import numpy as np
import warnings
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
j=i #we want to select any J not equal to i
while (j==i): # 一直在挑选随机数j,直到不等于i,随机数的范围在0~m
j = int(random.uniform(0,m))
return j # 返回挑选好后的随机数
def clipAlpha(aj,H,L): # 门限函数
if aj > H:
aj = H # aj最大不能超过H,最小不能低于L
if L > aj:
aj = L
return aj
def smoSimple(dataMatIn, classLabels):# 输入数据,标记,常数C,容错率,最大迭代次数
dataMatrix = mat(dataMatIn); # 转换成矩阵
labelMat = mat(classLabels).transpose() # 转换成矩阵,并转置,标记成为一个列向量,每一行和数据矩阵对应
b