支持向量机SVM的学习笔记。对书中关键知识点进行了摘录,并加入一些自己的理解。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
python代码主要参照《机器学习实战》上的python代码和数据集
#author=altman
import numpy as np
import copy as cp
import matplotlib.pyplot as plt
'''
读取数据
'''
def readData(fileName):
matrix = []
labels = []
fr = open(fileName)
for line in fr.readlines():
line = line.strip().split("\t")
data = list(map(float,line))
matrix.append([data[0],data[1]])
labels.append(data[-1])
return matrix,labels
def clipAlpha(aj,H,L):
if aj > H:
aj = H
if L > aj:
aj = L
return aj
def kernelTrans(X, A, kTup):
m,n = np.shape(X)
K = np.mat(np.zeros((m,1)))
if kTup[0]=='lin':
K = X * A.T
elif kTup[0]=='rbf':
for j in range(m):
deltaRow = X[j,:] - A
K[j] = deltaRow*deltaRow.T
K = np.exp(K/(-1*kTup[1]**2))
return K
'''
数据结构
'''
class svmStrcut(object):
"""docstring for svmStrcut"""
def __init__(self, data,labels,C,toler,kTup):
self.C = C
self.data = data
self.labels = labels
self.toler = toler
self.m = self.data.shape[0]
self.b = 0.0
self.alphas = np.mat(np.zeros((self.m,1)))
self.eCache = np.mat(np.zeros((self.m,2)))
self.K = np.mat(np.zeros((self.m,self.m)))
for i in range(self.m):
self.K[:,i] = kernelTrans(self.data, self.data[i,:], kTup)
'''
计算误差
error=g(x)-y
'''
def calcEk(sT,k):
value = float(np.mu