基于SMO—RBF的SVM手写体识别分类之Python

今天看了Python语言写的使用SVM中的SMO进行优化,使用RBF函数进行手写体识别,下面简单整理一下整个过程及思路,然后详细介绍各个部分。

(1)获取训练数据集trainingMat和labelMat;

(2)利用SMO进行优化获得优化参数alphas和b,这一步即是进行训练获得最优参数

(3)使用alphas和b带入RBF高斯核函数计算训练集输出并计算训练错误率;

(4)获取测试数据集testMat和labelMat1;

(5)使用(2)的参数alphas和b带入RBF高斯核函数计算输出,从而计算分类错误率。

def testDigits(kTup=(‘rbf‘,10)):
    dataArr,labelArr=loadImages(‘D://softwareTool/Python/python_exerciseCode/Chap6_SVM//trainingDigits‘);
    b,alphas=smoP(dataArr,labelArr,200,0.0001,1000,kTup);
    dataMat=mat(dataArr);
    labelMat=mat(labelArr).transpose();
    # 取得支持向量的索引
    svInd=nonzero(alphas.A>0)[0];
    sVs=dataMat[svInd];
    labelSV=labelMat[svInd];
    print("there are ",shape(sVs)[0],‘ Support Vectors‘);
    m,n=shape(dataMat);
    errorCount=0.0;
    for i in range(m):
        kernelEvl=kernelTrans(sVs,dataMat[i,:],kTup);
        # 计算输出公式
        predict=kernelEvl.T*multiply(labelSV,alphas[svInd])+b;
        if sign(predict)!=sign(labelMat[i]):
            errorCount+=1.0;
    print("the training error rate is:",errorCount/(len));
    dataArr,labelArr=loadImages(‘D://softwareTool/Python/python_exerciseCode/Chap6_SVM//testDigits‘);
    dataMat=mat(dataArr);
    labelMat=mat(labelArr).transpose();
    m,n=shape(dataMat);
    errorCount=0.0;
    for i in range(m):
        kernelEval=kernelTrans(sVs,dataMat[i,:],kTup);
        predict=kernelEval*multiply(labelSV,alphas[svInd])+b;
        if sign(predict)!=sign(labelMat[i]):
            errorCount+=1.0;
    print("the test error rate is: ",errorCount/float(ms));

  上面是整个主框架和主程序。

下面分模块介绍各个部分:

(1)获取训练数据集和训练标签:

如给的训练数据存放在文件trainingDigits中,其里面有多个.txt子文件,每个.txt文件存放的是一幅32*32的的图像,每一幅图像表示0-9的一个数字;

如这幅图显示的为数字3,最后将每幅图像转化为一个32*32=1024的列向量,如果训练样本数为m,则dataMat为m*1024的矩阵,labelMat为1*m的列向量。

下面先说说在Python中怎样将一幅图像(例32*32)转化为一个列向量(1*1024):函数输入为这幅图像的文件名‘3_177.txt’

伪代码:初始化列向量returnVec为zeors((1,1024));

遍历每行:

读取每行(1*32的列向量)内容;

将每行内容添加到returnVec中;

返回returnVec;

时间: 2024-10-13 20:28:11

基于SMO—RBF的SVM手写体识别分类之Python的相关文章

机器学习经典算法详解及Python实现--基于SMO的SVM分类器

原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector machine,简称SVM.通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解. (一)理解SVM基本原理 1,SVM的本质--分类 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些

基于MFC的手写体识别

测试环境vs2010 windows 7(说明如果是xp系统需要手写识别程序运行环境,手写体识别开发库等) project:手写体识别code 测试结果: 版权声明:欢迎转载,如有不足之处,恳请斧正.

基于kNN的手写字体识别——《机器学习实战》笔记

看完一节<机器学习实战>,算是踏入ML的大门了吧!这里就详细讲一下一个demo:使用kNN算法实现手写字体的简单识别 kNN 先简单介绍一下kNN,就是所谓的K-近邻算法: [作用原理]:存在一个样本数据集合.每个样本数据都存在标签.输入没有标签的新数据后,将新数据的每个特征与样本集数据的对应特征进行比较,然后算法提取样本集中最相似的分类标签.一般说来,我们只选择样本数据集中前k个最相似的数据,最后,选择这k个相似数据中出现次数最多的分类,作为新数据的分类. 通俗的说,举例说明:有一群明确国籍

OpenCV SVM多类分类问题编程示例

2014年4月,北京--TechExcel喜签网目信息技术(上海)有限公司(以下简称"网目信息"),采用TechExcel公司CustomerWise产品助力其建立全球用户统一门户,统一各分公司的服务标准和服务流程,为用户提供全球标准化的服务. ICONZ-Webvisions公司(网目信息)总部设在新加坡,拥有20多年的IT运维及外包服务经验历史,是唯一以亚洲为中心,为亚洲.澳大利亚和全球市场提供"云"和托管服务的供应商.ICONZ-Webvisions可以利用其

使用K近邻算法实现手写体识别系统

目录 1. 应用介绍 1.1实验环境介绍 1.2应用背景介绍 2. 数据来源及预处理 2.1数据来源及格式 2.2数据预处理 3. 算法设计与实现 3.1手写体识别系统算法实现过程 3.2 K近邻算法实现 3.3手写体识别系统实现 3.4算法改进与优化 4. 系统运行过程与结果展示 1.应用介绍 1.1实验环境介绍 本次实验主要使用Python语言开发完成,Python的版本为2.7,并且使用numpy函数库做一些数值计算和处理. 1.2应用背景介绍 本次实验实现的是简易的手写体识别系统,即根据

基于Haar特征Adaboost人脸检测级联分类

基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.Adaboost.级联.理解了这三个词对该算法基本就掌握了. 1        算法要点 Haar分类器 = Haar-like特征 + 积分图方法 + AdaBoost +级联: Haar分类器算法的要点例如以下: a)        使用Haar-like特征做检測. b)       使用积分图(IntegralImage)对Haar-like

基于协同训练的半监督文本分类算法

标签: 半监督学习,文本分类 作者:炼己者 --- 本博客所有内容以学习.研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢! 如果大家觉得格式看着不舒服,也欢迎大家去看我的简书 半监督学习文本分类系列 用半监督算法做文本分类(sklearn) sklearn半监督学习(sklearn) 基于自训练的半监督文本分类算法 一. 摘要 本文主要讲述基于协同训练的半监督算法做文本分类,用三个差异性比较大的分类器对未标注数据进行标注,它们可以进行交叉验证,大大提升了对未标注数据

MNIST数据集手写体识别(CNN实现)

github博客传送门 csdn博客传送门 本章所需知识: 没有基础的请观看深度学习系列视频 tensorflow Python基础 资料下载链接: 深度学习基础网络模型(mnist手写体识别数据集) MNIST数据集手写体识别(CNN实现) import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data # 导入下载数据集手写体 mnist = input_data.read

MNIST数据集手写体识别(MLP实现)

github博客传送门 csdn博客传送门 本章所需知识: 没有基础的请观看深度学习系列视频 tensorflow Python基础 资料下载链接: 深度学习基础网络模型(mnist手写体识别数据集) MNIST数据集手写体识别(MLP实现) import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data # 导入下载数据集手写体 mnist = input_data.read