资源简介
这是一份基于支持向量机(SVM)的手写字体识别源代码(Python版本),目前只支持二分类识别。实现了快速SMO算法。

代码片段和文件信息
# coding=gbk
from numpy import *
import datetime
from os import listdir
from PIL import Image
# 随机选取
def selectJrand(i m):
j = i
while j == i:
j = int(random.uniform(0 m))
return j
# 剪切 alpha 使其符合取值范围
def clipAlpha(aj H L):
if aj > H:
aj = H
if L > aj:
aj = L
return aj
# 核函数 X,A:输入向量 kTup:核函数类型
def kernelTrans(X A kTup):
m n = shape(X)
K = mat(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 = exp(K / (-1 * kTup[1] ** 2))
else:
raise NameError(‘Kernel is not recognized‘)
return K
class optStruct:
def __init__(self dataMatIn classLabels C toler kTup):
self.X = dataMatIn
self.labelMat = classLabels
self.C = C
self.tol = toler
self.m = shape(dataMatIn)[0]
self.alphas = mat(zeros((self.m 1)))
self.b = 0
self.eCache = mat(zeros((self.m 2))) # 第一列是有效的标志位 第二列是实际偏差值
self.K = mat(zeros((self.m self.m)))
for i in range(self.m):
self.K[: i] = kernelTrans(self.X self.X[i :] kTup)
# 计算误差 计算值-标签值
def calcEk(oS k):
fXk = float(multiply(oS.alphas oS.labelMat).T * oS.K[: k] + oS.b)
Ek = fXk - float(oS.labelMat[k])
return Ek
# 查询alpha2 使得 alpha1 与 alpha2 的 △E 最大
def selectJ(i oS Ei):
maxK = -1
maxDeltaE = 0
Ej = 0
oS.eCache[i] = [1 Ei]
validEcacheList = nonzero(oS.eCache[: 0].A)[0] # 得到E值有效的位置
if (len(validEcacheList)) > 1:
for k in validEcacheList:
if k == i: continue
Ek = calcEk(oS k)
deltaE = abs(Ei - Ek)
if deltaE > maxDeltaE:
maxK = k
maxDeltaE = deltaE
Ej = Ek
return maxK Ej
else: # 第一次循环时 没有E值有效 随机选择一个J
j = selectJrand(i oS.m)
Ej = calcEk(oS j)
return j Ej
# alpha 改变后 更新E值
def updateEk(oS k):
Ek = calcEk(oS k)
oS.eCache[k] = [1 Ek]
# alpha 内循环 有 alpha 成功改变 返回1 否则返回0
def innerL(i oS):
Ei = calcEk(oS i)
if ((oS.labelMat[i] * Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or (
(oS.labelMat[i] * Ei > oS.tol) and (oS.alphas[i] > 0)):
j Ej = selectJ(i oS Ei)
alphaIold = oS.alphas[i].copy()
alphaJold = oS.alphas[j].copy()
if oS.labelMat[i] != oS.labelMat[j]:
L = max(0 oS.alphas[j] - oS.alphas[i])
H = min(oS.C oS.C + oS.alphas[j] - oS.alphas[i])
else:
L = max(0 oS.alphas[j] + oS.alphas[i] - oS.C)
H = min(oS.C oS.alphas[j] + oS.alphas[i])
if L == H:
return 0
eta = 2.0 * oS.K[i j] - oS.K[i i] - oS.K[j j]
if eta >= 0:
return 0
oS.alpha
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-09-07 20:08 SVM\
目录 0 2017-09-04 15:10 SVM\.idea\
目录 0 2017-08-25 17:10 SVM\.idea\inspectionProfiles\
文件 410 2017-08-25 17:10 SVM\.idea\inspectionProfiles\Project_Default.xm
文件 213 2017-08-25 16:36 SVM\.idea\misc.xm
文件 258 2017-08-25 16:34 SVM\.idea\modules.xm
文件 398 2017-08-25 16:36 SVM\.idea\SVM.iml
文件 18335 2017-09-04 15:10 SVM\.idea\workspace.xm
文件 8614 2017-09-07 19:53 SVM\SMO.py
文件 8206 2017-09-07 19:53 SVM\SMO.pyc
文件 167 2017-09-07 20:08 SVM\SVM.py
相关资源
- 机器学习k means算法实现图像分割
- svm实验指导.pptx
- 带图形界面、车牌识别源码python+ope
- 机器学习对应的相关python代码SVM、C
- 作业一_BP_SVM_RBF函数拟合.7z
- hog_svm_train_python
- 从零开始学习SVM
- SVM解兵王问题_python.zip
- python 实现 纹理图片分类识别 SVM支持
- 使用libsvm数据分类
- Python实现基于SVM的车牌识别程序.zip
- 支持向量机-SVM程序.zip
- 基于python的行人与车辆检测和跟踪实
- 车牌识别系统_python,opencv
- PCB缺陷检测文献总结
- SVM分类手动鼠标手写数字-python版本
- SVR(Python)的使用
- 支持向量机源码Python实现
- 实现svm对鸢尾花进行分类
- 使用支持向量机将二维数据三维化划
- LSSVM,python代码
- misvm 多支持向量机.zip
- 支持向量机几个的代码
- SVM鸢尾花分类Python实现.rar
- 支持向量机SVM python源代码
- python svm 源码实现
- 使用 python手动实现了SVM支持向量机
- 支持向量机SVM——人脸识别
- bow+svm车辆检测
- SVM人脸识别的Python代码
评论
共有 条评论