ex3的第一小节是扩充之前的logistic regression算法,并将其应用到多分类器中。
1、数据集
文件ex3data1.mat中包含了5000个手写数字训练样本,每个数字图像含有2020个灰度像素值,使用浮点数来代替每个位置的灰度级,每个图像存储为400维矢量。文件ex3data1.mat含有矩阵X和矢量y,其中X维度为5000400,y的维度为5000*1,每个训练样本(手写数字图像)均为矩阵X的1行,则矩阵X可以表示为:

矢量y为训练集的标签,其每行的数据代表的是对应X矩阵中对应行的训练样本代表的数值,即0-9。由于在matlab中没有偏移量index0,因此,将标签值’0’修改为’10’,即y中数值实际为1-10,其中10代表0。

load('ex3data1.mat'); % training data stored in arrays X, y


2、原始数据的可视化

clear ; close all; clcinput_layer_size  = 400;  % 20x20 Input Images of Digits,输入点数为400
num_labels = 10;          % 10 labels, from 1 to 10,输出点数为10% (note that we have mapped "0" to label 10)% Load Training Data
fprintf('Loading and Visualizing Data ...\n')load('ex3data1.mat'); % training data stored in arrays X, y
m = size(X, 1);%m为X的总行数,即训练样本的个数% Randomly select 100 data points to display
rand_indices = randperm(m);%随机打乱1-m,得到一个序列
sel = X(rand_indices(1:100), :);displayData(sel);fprintf('Program paused. Press enter to continue.\n');
pause;

rand_indices = randperm(m)该语句的意思是随机打乱数据1-m,并得到该序列,其返回值为一个行向量。
rand_indices(1:100)获取随机序列的前100位,其实际就是从1-m中随机抽取100个数据
sel = X(rand_indices(1:100), ?;将随机序列作为索引从矩阵X中抽取对应的行向量,即从训练集中随机抽取100个训练样本。
其中sel为100400的矩阵。

3、矢量化的logistic regression算法
由于要分成10类,正常情况下应该进行10次独立的logistic regression算法,矢量化算法可以减少代码。
(1)矢量化代价函数
在ex2中代价函数为:

其中:


可以重新定义矩阵X和theta以快速计算:


矩阵X为m×n矩阵,m个样本,每个样本有n个特征值。则Xtheta为m×1矩阵。
sigmoid(X
theta)为m×1矩阵,每行均为每个样本的拟合值。
由于存在求和,而y为列向量,则可以采用转置相乘的方式求和,可以得到代码为:

J = (y'*log(sigmoid(X*theta))+(1-y)'*log(1-sigmoid(X*theta)))/(-m);

执行代码,其结果为:

Testing lrCostFunction() with regularization
Cost: 0.734819
Expected cost: 2.534819

此处还未进行正则化,固与期望的结果不一致。
(2)矢量化梯度函数
在ex2中,其梯度计算函数为:

对其进行矢量化有:

grad = X'*(sigmoid(X*theta)-y)/m;

运行程序:

Gradients:0.146561 0.051442 0.124722 0.198003
Expected gradients:0.146561-0.5485580.7247221.398003

可以看到grad(1)与期望值一致,其余不同,这是由于未进行正则化导致的,给出的期望值是正则化后的值。
(3)矢量化正则化logistic regression
正则化有:


修改代码为:

J = (y'*log(sigmoid(X*theta))+(1-y)'*log(1-sigmoid(X*theta)))/(-m)...+(theta'*theta-theta(1)^2)*lambda/(2*m);
grad = X'*(sigmoid(X*theta)-y)/m+ lambda*theta/m;
grad(1) = X(:,1)'*(sigmoid(X*theta)-y)/m;

再次运行程序,得到的结果为:

Testing lrCostFunction() with regularization
Cost: 2.534819
Expected cost: 2.534819
Gradients:0.146561 -0.548558 0.724722 1.398003
Expected gradients:0.146561-0.5485580.7247221.398003

4、多分类器
函数[all_theta] = oneVsAll(X, y, num_labels, lambda)是训练多个logistic regression分类器,其返回值all_theta为K×(N+1)矩阵,其中K为分类器的数量,N为每个样本特征值的数量。则返回值all_theta的每一行均代表的是对应的分类器(如本例中分类器label为1-10)的拟合theta值。
在编写程序时,针对训练的分类器k(k∈{1,2,…,K}),需要一个标签矢量y(此处的y并非实例中的y∈{1,2,…,10},而是y∈{0,1}),该标签矢量需要重新通过逻辑运算获得,例如当前样本的标签矢量为[1 2 1 3 2 4],需要训练分类器y=1,则此时输入训练的标签矢量y=[1 0 1 0 0 0],需要训练分类器y=2,则此时输入训练的标签矢量y = [0 1 0 0 1 0],需要训练分类器y=3,则此时输入训练的标签矢量y = [0 0 0 1 0 0],依次类推。

function [all_theta] = oneVsAll(X, y, num_labels, lambda)
m = size(X, 1);%m行
n = size(X, 2);%n列
all_theta = zeros(num_labels, n + 1);% Add ones to the X data matrix
X = [ones(m, 1) X];
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
for i = 1:num_labels[theta] = fmincg (@(t)(lrCostFunction(t, X, (y == i), lambda)),...initial_theta, options);all_theta(i,:) = theta;
end

5、多分类器训练预测
完善predictOneVsAll函数

A = sigmoid(X*all_theta');
[max_A,p] = max(A, [], 2);

回顾之前的内容:
矩阵X每一行均代表一个样本,列为其对应样本的特征参数,本例中有5000个样本,400个特征参数,故X的维度为5000×401,其中第一列全为1,为特征参数x0,。
矩阵all_theta每一行为对应的y的label训练出来的theta值,如第1行为y=0对应的theta值,第3行为y=3对应的theta值,则在本例中all_theta的维度为10401。
通过以上分析可知sigmoid(X
all_theta’)实际上得到的是:每行为每个对应label的概率,如第1行为第一个样本计算出来的y=1-10的概率。第3行第4列的数据为第3个样本label y=4的概率。
故需要获得矩阵A = sigmoid(X*all_theta’)按行的最大值位置,即为该系统分类的对应样本的label值。
[max_A,p] = max(A, [], 2)可以完成上述工作,max_A为按行获取的最大值,p为按行获取最大值的位置。
执行程序有:

Training Set Accuracy: 94.960000

吴恩达机器学习练习3:Logistic regression(Multi-class Classification)相关推荐

  1. 吴恩达机器学习 -- 逻辑回归(Logistic Regression)

    7.1  分类问题 如果要预测的变量 是离散值,此时我们应用 logistics regression. 在分类问题中,我们对某一事物进行分类,有二分类和多分类问题.此节先讨论二分类问题,即只有两个分 ...

  2. 吴恩达机器学习笔记 —— 7 Logistic回归

    http://www.cnblogs.com/xing901022/p/9332529.html 本章主要讲解了逻辑回归相关的问题,比如什么是分类?逻辑回归如何定义损失函数?逻辑回归如何求最优解?如何 ...

  3. 吴恩达机器学习作业5---Regularized Linear Regression and Bias vs. Variance

    Regularized Linear Regression and Bias vs.Variance 文章目录 Regularized Linear Regression and Bias vs.Va ...

  4. 吴恩达机器学习作业Python实现(二):logistic回归

    吴恩达机器学习系列作业目录 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果, ...

  5. 吴恩达机器学习课后作业1——单变量线性回归(Linear regression with one variable)

    1. 问题和数据 假设你是一家连锁餐车店的老板,但是你又和别的土老板不一样,你又刚好是个懂线性回归,还懂编程的老板,正在考虑在不同的城市开一家新店.该连锁店已经在各个城市开设了餐车,你可以获得这些城市 ...

  6. 吴恩达机器学习课后作业1.1——多变量线性回归(Linear regression with multiple variable)

    1. 问题和数据 假设你要卖掉你的房子,你想知道一个好的市场价格是多少.其中一种方法是,首先收集最近出售的房屋的信息.在本部分的练习中,你将使用多元线性回归来预测房屋价格. 数据ex1data2.tx ...

  7. 带你少走弯路:五篇文章学完吴恩达机器学习

    本文是吴恩达老师的机器学习课程[1]的笔记和代码复现部分,这门课是经典,没有之一.但是有个问题,就是内容较多,有些内容确实有点过时. 如何在最短时间学完这门课程?作为课程的主要翻译者和笔记作者,我推荐 ...

  8. 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1

    python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...

  9. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  10. python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...

    Programming Exercise 3: Multi-class Classification and Neural Networks 吴恩达机器学习教程练习3,练习数据是5000个手写数字(0 ...

最新文章

  1. ElasticSearch5.6安装head插件
  2. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)
  3. 启动MySQL数据库时找不到mysqld.sock的解决办法!
  4. 软件著作权 开源框架_开源软件分享-基于.net core 3.1的快速开发框架
  5. boost::geometry::num_segments用法的测试程序
  6. mysql Access denied for user root@localhost错误解决方法总结
  7. quartz 时间配置规则
  8. .NET实现之(自动更新
  9. jquery $加一个点后面加个名称的意思
  10. python axes函数_matplotlib中的axes.flat做什么?
  11. ssr怎么编辑服务器ip_“阴阳师”IP影响力有多大?网易用它做了一款弹珠游戏,TapTap评分高达9.8分...
  12. win10怎么设置默认输入法_微软拼音输入法怎么设置快捷短语
  13. 谷歌大数据三大论文中文版和英文版合集
  14. Heterogeneous Graph Neural Network(异质图神经网络)
  15. 基于FPGA的电子计算器设计(下)
  16. phabricator代码提交自动触发Jenkins token发版(一)
  17. 硬盘知识:硬盘中蓝盘、绿盘、黑盘、红盘有什么区别?
  18. MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法
  19. 超链接 番茄札记 html,番茄学习法笔记以及初始尝试
  20. 环信多人音视频会议功能实现

热门文章

  1. 解析json数组——TypeToken
  2. ORM + 数据库链接池
  3. pdoModel封装
  4. 表单单选多选项清除默认样式小技巧
  5. 在微信中调用ajax出现的问题
  6. 当relative遇上z-index,半透明度不阻断事件捕获
  7. python基础0304
  8. PHP变量名区分大小写,函数名不区分大小写
  9. ASP .NET基本概念
  10. 07: redis分布式锁解决超卖问题