本作业使用逻辑回归(logistic regression)和神经网络(neural networks)识别手写的阿拉伯数字(0-9)

关于逻辑回归的一个编程练习,可参考:http://www.cnblogs.com/hapjin/p/6078530.html

下面使用逻辑回归实现多分类问题:识别手写的阿拉伯数字(0-9),使用神经网络实现:识别手写的阿拉伯数字(0-9),请参考:神经网络实现

数据加载到Matlab中的格式如下:

一共有5000个训练样本,每个训练样本是400维的列向量(20X20像素的 grayscale image),用矩阵 X 保存。样本的结果(label of training set)保存在向量 y 中,y 是一个5000行1列的列向量。

比如 y = (1,2,3,4,5,6,7,8,9,10......)T,注意,由于Matlab下标是从1开始的,故用 10 表示数字 0

①样本数据的可视化

随机选择100个样本数据,使用Matlab可视化的结果如下:

②使用逻辑回归来实现多分类问题(one-vs-all)

所谓多分类问题,是指分类的结果为三类以上。比如,预测明天的天气结果为三类:晴(用y==1表示)、阴(用y==2表示)、雨(用y==3表示)

分类的思想,其实与逻辑回归分类(默认是指二分类,binary classification)很相似,对“晴天”进行分类时,将另外两类(阴天和下雨)视为一类:(非晴天),这样,就把一个多分类问题转化成了二分类问题。示意图如下:(图中的圆圈 表示:不属于某一类的 所有其他类)

对于N分类问题(N>=3),就需要N个假设函数(预测模型),也即需要N组模型参数θ(θ一般是一个向量)

然后,对于每个样本实例,依次使用每个模型预测输出,选取输出值最大的那组模型所对应的预测结果作为最终结果。

因为模型的输出值,在sigmoid函数作用下,其实是一个概率值。,注意:hθ(1)(x),hθ(2)(x),hθ(3)(x)三组 模型参数θ 一般是不同的。比如:

hθ(1)(x),输出 预测为晴天(y==1)的概率

hθ(2)(x),输出 预测为阴天(y==2)的概率

hθ(3)(x),输出 预测为雨天(y==3)的概率

③Matlab代码实现

对于上面的识别阿拉伯数字的问题,一共需要训练出10个逻辑回归模型,每个逻辑回归模型对应着识别其中一个数字。

我们一共有5000个样本,样本的预测结果值就是:y=(1,2,3,4,5,6,7,8,9,10),其中 10 代表 数字0

我们使用Matlab fmincg库函数 来求解使得代价函数取最小值的 模型参数θ

function [all_theta] = oneVsAll(X, y, num_labels, lambda)
%ONEVSALL trains multiple logistic regression classifiers and returns all
%the classifiers in a matrix all_theta, where the i-th row of all_theta
%corresponds to the classifier for label i
%   [all_theta] = ONEVSALL(X, y, num_labels, lambda) trains num_labels
%   logisitc regression classifiers and returns each of these classifiers
%   in a matrix all_theta, where the i-th row of all_theta corresponds
%   to the classifier for label i% Some useful variables
m = size(X, 1);% num of samples
n = size(X, 2);% num of features% You need to return the following variables correctly
all_theta = zeros(num_labels, n + 1);% Add ones to the X data matrix
X = [ones(m, 1) X];% ====================== YOUR CODE HERE ======================
% Instructions: You should complete the following code to train num_labels
%               logistic regression classifiers with regularization
%               parameter lambda.
%
% Hint: theta(:) will return a column vector.
%
% Hint: You can use y == c to obtain a vector of 1's and 0's that tell use
%       whether the ground truth is true/false for this class.
%
% Note: For this assignment, we recommend using fmincg to optimize the cost
%       function. It is okay to use a for-loop (for c = 1:num_labels) to
%       loop over the different classes.
%
%       fmincg works similarly to fminunc, but is more efficient when we
%       are dealing with large number of parameters.
%
% Example Code for fmincg:
%
%     % Set Initial theta
%     initial_theta = zeros(n + 1, 1);
%
%     % Set options for fminunc
%     options = optimset('GradObj', 'on', 'MaxIter', 50);
%
%     % Run fmincg to obtain the optimal theta
%     % This function will return theta and the cost
%     [theta] = ...
%         fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
%                 initial_theta, options);
%
initial_theta = zeros(n + 1, 1);options = optimset('GradObj','on','MaxIter',50);for c = 1:num_labels %num_labels 为逻辑回归训练器的个数,num of logistic regression classifiers
all_theta(c, :) = fmincg(@(t)(lrCostFunction(t, X, (y == c),lambda)), initial_theta,options );
end
% =========================================================================
end

lrCostFunction,完全可参考:http://www.cnblogs.com/hapjin/p/6078530.html 里面的 正则化的逻辑回归模型实现costFunctionReg.m文件

下面来解释一下 for循环:

num_labels 为分类器个数,共10个,每个分类器(模型)用来识别10个数字中的某一个。

我们一共有5000个样本,每个样本有400中特征变量,因此:模型参数θ 向量有401个元素。

initial_theta = zeros(n + 1, 1); % 模型参数θ的初始值(n == 400)

all_theta是一个10*401的矩阵,每一行存储着一个分类器(模型)的模型参数θ 向量,执行上面for循环,就调用fmincg库函数 求出了 所有模型的参数θ 向量了。

求出了每个模型的参数向量θ,就可以用 训练好的模型来识别数字了。对于一个给定的数字输入(400个 feature variables) input instance,每个模型的假设函数hθ(i)(x) 输出一个值(i = 1,2,...10)。取这10个值中最大值那个值,作为最终的识别结果。比如g(hθ(8)(x))==0.96 比其它所有的 g(hθ(i)(x)) (i = 1,2,...10,但 i 不等于8) 都大,则识别的结果为 数字 8

function p = predictOneVsAll(all_theta, X)
%PREDICT Predict the label for a trained one-vs-all classifier. The labels
%are in the range 1..K, where K = size(all_theta, 1).
%  p = PREDICTONEVSALL(all_theta, X) will return a vector of predictions
%  for each example in the matrix X. Note that X contains the examples in
%  rows. all_theta is a matrix where the i-th row is a trained logistic
%  regression theta vector for the i-th class. You should set p to a vector
%  of values from 1..K (e.g., p = [1; 3; 1; 2] predicts classes 1, 3, 1, 2
%  for 4 examples) m = size(X, 1);
num_labels = size(all_theta, 1);% You need to return the following variables correctly
p = zeros(size(X, 1), 1);% Add ones to the X data matrix
X = [ones(m, 1) X];% ====================== YOUR CODE HERE ======================
% Instructions: Complete the following code to make predictions using
%               your learned logistic regression parameters (one-vs-all).
%               You should set p to a vector of   (from 1 to
%               num_labels).
%
% Hint: This code can be done all vectorized using the max function.
%       In particular, the max function can also return the index of the
%       max element, for more information see 'help max'. If your examples
%       are in rows, then, you can use max(A, [], 2) to obtain the max
%       for each row.
%       [~,p] = max( X * all_theta',[],2); % 求矩阵(X*all_theta')每行的最大值,p 记录矩阵每行的最大值的索引
% =========================================================================
end
本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)相关推荐

  1. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  2. 吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码

    吴恩达<机器学习>笔记八--逻辑回归(多分类)代码 导入模块及加载数据 sigmoid函数与假设函数 代价函数 梯度下降 一对多分类 预测验证 课程链接:https://www.bilib ...

  3. 机器学习笔记(三)---- 逻辑回归(二分类)

    逻辑回归基本概念 前面提到过线性模型也可以用来做分类任务,但线性模型的预测输出 y = wx + b 可能是(-∞,+∞)范围内的任意实数,而二分类任务的输出y={0,1},如何在这之间做转换呢?答案 ...

  4. 机器学习笔记(四)---- 逻辑回归的多分类

    一般情况下,我们都认为逻辑回归(LR)用来解决二分类问题,模型输出是y=1的概率值.那逻辑回归能否用来做多分类任务呢,答案是肯定的. 这里有两种方法使得逻辑回归能进行多分类任务: 一.将多分类任务拆解 ...

  5. Coursera机器学习编程作业Python实现(Andrew Ng)—— 2.1 Logistic Regression

    2.1 Logistic Regression import numpy as np import pandas as pd import matplotlib.pyplot as plt impor ...

  6. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  7. 机器学习编程作业ex2(matlab/octave实现)-吴恩达coursera

    分成两部分,一是本节课程内容的简要回顾,二是作业步骤的推导 程序打包网盘地址提取码1111 (后续部分,需要填入的代码为深色框,已经提供的代码为浅色框.) 一.内容回顾 逻辑回归Logistic Re ...

  8. Andrew NG 机器学习编程作业3 Octave

    问题描述:使用逻辑回归(logistic regression)和神经网络(neural networks)识别手写的阿拉伯数字(0-9) 一.逻辑回归实现: 数据加载到octave中,如下图所示: ...

  9. 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

最新文章

  1. 智能车竞赛技术报告 | 单车拉力组 - 长春理工大学- 追风零队 2021
  2. 开心网外挂开发之 XML序列化于反序列化
  3. python一次性输入10个数_python如何一次性输入多个数
  4. LeetCode 15三数之和16最接近的三数之和
  5. 查看dll文件被哪些软件调用的命令
  6. 年薪40W+还招不到人!人工智能到底有多火?(附人工智能+Python 自学视频资料)...
  7. java类初始化顺序_《To Be a Better Javaer》-- Java 基础篇 vol.2:面向对象
  8. task2 EDA探索性数据分析
  9. WordPress一个还不错的404html单页代码
  10. 【蓝桥杯嵌入式】【STM32】8_USART之响应上位机指令发送实时时间
  11. 2021牛客寒假算法基础集训营4,签到题AGJ
  12. android项目模块导入eclipse编译报错,android环信demo导入eclipse编译出错
  13. stm32——使用串口下载程序
  14. 考勤日历插件 android,jQuery手机考勤日历插件
  15. ant 中日历组件中英文混杂解决办法
  16. python怎么退出窗口_关闭pyplot窗口
  17. Linux基础课程汇总-辛舒展-专题视频课程
  18. ppt无损转图片jpg,pdf api
  19. 华为防火墙通用配置详解
  20. [gdc13]《孤岛危机3》渲染技术

热门文章

  1. python在财务中的应用实训报告-DATATOM | 大数据实训
  2. python基础第三章选择结构答案-python3 学习笔记(二)选择结构、循环结构
  3. 搜索github项目stars排名
  4. 题目1176:树查找
  5. wsl开nginx和php-fpm遇到的几个小问题
  6. sql 脚本编写之路 常用语句(一) 1.用一个表中的某一列更新另外一个表的某些列:...
  7. scrapy-redis组件写分布式爬虫实战
  8. Cocos Creator学习目录
  9. python3 线程_threading模块
  10. TeskLink—增加一种需求类型(业务流程)(version1.9.8)