使用one-vs-all初始手写字母识别

数据特点

  • 每一个图片都是20 x 20的像素矩阵,但是在输入的样本中是一个1 x 400的向量,标签y在{0, 1, 2, ..., 9}之间取值
  • 共有5000个训练样本

可视化数据

  • 从5000个样本中随机的挑选出100个训练样本进行可视化
  • 得到的100个样本中,每一个样本都是一个向量,要想对其可视化,需要将其从向量还原为原始的矩阵
  • 首先确定矩阵的高和宽(单位是像素pixel)
  • 创建一个displayArray矩阵,用来保存100个样本转换为矩阵的像素数据,形象地讲,就是将100个图片放到一个大的面板上,这样才能做到可视化数据
  • 初始完毕displayArray矩阵之后,使用matlib中的imagesc函数将其显示出来
  • 代码如下:
  • myDisplayData.m
function [h, displayArray] = myDisplayData(X)

% 获取一张图片的高和宽
exampleHeight = round(sqrt(size(X(1, :), 2)));
exampleWidth = round(size(X(1, :), 2) / exampleHeight); % 计算整个面板的高和宽(但是是图片的个数)
[m, n] = size(X);
displayRows = round(sqrt(m));
displayCols = round(m / displayRows); % 先创建出displayRows * exampleHeight, displayCols * exampleWidth的面板
displayArray = ones(displayRows * exampleHeight, displayCols * exampleWidth); % 将图片放到面板对应的位置上
% 下面的式子就和数学有一些关系,如何确定现在填充的矩阵在displayArray中的位置
currExample = 1;
for i = 1:displayRows
for j = 1:displayCols
displayArray(...
(i - 1) * exampleWidth + 1:exampleWidth + (i - 1) * exampleWidth, ...
(j - 1) * exampleHeight + 1:exampleHeight + (j - 1) * exampleHeight ...
) = ...
reshape(X(currExample, :), ...
exampleHeight, exampleWidth);
currExample = currExample + 1;
end
end colormap(gray);
h = imagesc(display_array);
axis image off;
end

数据预处理

  • 为X添加bias(偏移量): X = [ones(m, 1), X]; % m表示样本的数量
  • m: 训练样本的数量
  • n: 特征的数量,不包括bias(偏移)特征
  • y: 标签,{0, 1, 2, ..., 9}
  • numLabel: y可以取的值的个数,这里为10

确定假设函数

  • 由题目可知,这是一个典型的Multi-Class Logistic Regression问题,因此使用逻辑回归模型
  • 模型函数: $$h(\theta)=g(\theta{T}x)={{1}\over{1+e{-\theta^{T}x}}}$$
  • 因为这个一个10分类的问题,所以需要拟合出10个假设函数才行,也就是要最小化出10个\(\theta\)向量,我们调用oneVsAll函数返回的参数应该是一个矩阵,每一个行向量是一个类别的假设函数的参数

计算损失函数(cost function)和梯度

  • 损失函数公式: $$J(\theta)={{1}\over{m}}\sum_{i=1}m(-y{(i)}log(h_{\theta}(x^{(i)})) - (1-y{(i)})log(1-h_{\theta}(x{(i)})))+{{\lambda}\over{2m}}\sum_{j=1}m{\theta_{j}2}$$其中\(\theta\), \(y^{(i)}\), \(x^{(i)}\)为向量或者矩阵,后一项是对非偏差项的正则化
  • 梯度公式: j >= 1 $${{\partial}\over{\partial}\theta_{j}}J(\theta)={{1}\over{m}}\sum_{i=1}m{(h_{\theta}(x{(i)})-y{(i)})x{(i)}} + {{\lambda}\over{m}}\theta_{j}$$ j = 0 $${{\partial}\over{\partial}\theta_{0}}J(\theta)={{1}\over{m}}\sum_{i=1}m{(h_{\theta}(x{(i)})-y{(i)})x{(i)}}$$
  • 注意,上面的\(h_{\theta}(x^{(i)})\)是sigmoid函数,自己在实现的时候总是将其写成线性回归函数

在oneVsAll.m文件中实现\(minimize_{\theta}J(\theta)\)

  • 每一个类都进行梯度下降,计算出这一类的参数,也就是写一个循环,在每一个循环中都有可以得到最终的这个类别对应的参数,循环的次数为numLabels

  • 核心代码

    for index = 1:numLabels
    initialTheta = zeros(n + 1, 1);
    options = optimset('GradObj', 'on', 'MaxIter', 50);
    % fmincg会自动选择最优的学习率alpha
    allTheta(index, :) = fmincg(@(t)(lrCostFunction(t, X, (y == index), lambda)), ...
    initialTheta, options);

end


## 预测 + 输入的一个样本,需要为其添加bias值,在将样本分别输入到10个假设函数中,计算出最大的值,那个值对应的就是类别。
+ 核心代码 ```matlib
tmp = zeros(m, num_labels);
for i = 1:num_labels
tmp(:, i) = sigmoid(X * allTheta(i, :)');
end
[val, p] = max(tmp, [], 2);

one-vs-all案例的更多相关文章

  1. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  4. Yeoman 官网教学案例:使用 Yeoman 构建 WebApp

    STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...

  5. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  6. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. Redis简单案例(二) 网站最近的访问用户

    我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...

  9. springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)

    用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...

  10. RabbitMQ + PHP (三)案例演示

    今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...

随机推荐

  1. IIS部署SSL,.crt .key 的证书,怎么部署到IIS

    SSL连接作用不说,百度很多.因为最近想考虑重构一些功能,在登录这块有打算弄成HTTPS的,然后百度了,弄成了,就记录一下,以便以后万一部署的时候忘记掉. 做实验的时候,拿的我个人申请的已经备案的域名 ...

  2. 全新的membership框架Asp.net Identity

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  3. 家用wifi信号覆盖增强扩展实用指南

    家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...

  4. 【大数据系统架构师】0.2 Linux基础

    1. Linux基本环境 1.1 大数据Hadoop前置大纲讲解 1)Linux系统,基本命令 2)Java语言,JavaSE相关知识 3)MySQL基本的DML和DDL 1.2 常见Linux系统. ...

  5. java 复习总结

    java 复习总结 命名方法 创建文件的名称应该和类的名称一致,不然会报错. 类采用首字母大写的方式来命名,如果是多个单词的类名,则每个单词首字母都大写,例如:HelloWorld . 方法采用驼峰命 ...

  6. 【AOP】基于@Aspect的AOP配置

    基于spring cloud的aop配置 1,启动类MemberAppliaction增加注解 @Import({SwaggerConfiguraion.class, WebMvcAutoConfig ...

  7. 【spring cloud】并发测试问题

    一,问题 并发测试,对外接口测试50个并发的时候开发报错,报错信息类似如下:  {"status":"0500","message":&qu ...

  8. uC/OS-II 一些函数简介

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 以前搞硬件的经验,最近突然翻出来了.分享给大家:主要讲解uC/OS-II常用函数:虽说现在转行软件了,但是感觉之前搞硬件的经验还真是很有用对于理解 ...

  9. 【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解

    迭代局部搜索(Iterated Local Search, ILS) 源代码下载请关注微信公众号[程序猿声],在后台回复:[ILS],不包括[]即可下载. 00 目录 局部搜索算法 简单局部搜索 迭代 ...

  10. Nagios监控平台搭建及配置文件详解

    Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...