逻辑回归的向量化实现样例

我们想用批量梯度上升法对logistic回归分析模型进行训练,其模型如下:

让我们遵从公开课程视频与CS229教学讲义的符号规范,设 ,于是 为截距。假设我们有m个训练样本{(, ) ,...,( , )},而批量梯度上升法的更新法则是: ,这里的 是对数似然函数, 是其导函数。

[注:下文的符号规范与<公开课程视频>或<教学讲义CS229:机器学习>中的相同,详细内容可以参见公开课程视频或教学讲义#1 http://cs229.stanford.edu/]

于是,我们需要如下计算梯度:

我们用Matlab/Octave风格变量x表示输入数据构成的样本矩阵,x(:,i)代表第 i个训练样本,x(j,i)就代表(译者注:第i个训练样本向量的第j个元素)。同样,用Matlab/Octave风格变量y表示由训练样本集合的全体类别标号所构成的行向量,则该向量的第i个元素y(i)就代表上式中的。(注意这里跟公开课程视频及CS229的符号规范不同,矩阵x按列而不是按行存放输入训练样本,同样,是行向量而不是列向量。)

以下是梯度运算代码的一种实现,非常恐怖,速度极慢:

% 代码1
grad = zeros(n+1,1);
for i=1:m,h = sigmoid(theta'*x(:,i));temp = y(i) - h; for j=1:n+1,grad(j) = grad(j) + temp * x(j,i); end;
end;

嵌套的for循环语句使这段代码的运行非常缓慢。以下是更典型的实现方式,它对算法进行部分向量化,带来更优的执行效率:

% 代码2
grad = zeros(n+1,1);
for i=1:m,grad = grad + (y(i) - sigmoid(theta'*x(:,i)))* x(:,i);
end;

但是,或许可以向量化得更彻底些。如果去除for循环,我们就可以显著地改善代码执行效率。特别的,假定b是一个列向量,A是一个矩阵,我们用以下两种方式来计算A*b:

% 矩阵-向量乘法运算的低效代码
grad = zeros(n+1,1);
for i=1:m,grad = grad + b(i) * A(:,i);  % 通常写法为A(:,i)*b(i)
end;% 矩阵-向量乘法运算的高效代码
grad = A*b;

我们看到,代码2是用了低效的for循环语句执行梯度上升(译者注:原文是下降)运算,将b(i)看成(y(i) - sigmoid(theta'*x(:,i))),A看成x,我们就可以使用以下高效率的代码:

% 代码3
grad = x * (y- sigmoid(theta'*x));

这里我们假定Matlab/Octave的sigmoid(z)函数接受一个向量形式的输入z,依次对输入向量的每个元素施行sigmoid函数,最后返回运算结果,因此sigmoid(z)的输出结果是一个与z有相同维度的向量。

当训练数据集很大时,最终的实现(译者注:代码3)充分发挥了Matlab/Octave高度优化的数值线性代数库的优势来进行矩阵-向量操作,因此,比起之前代码要高效得多。

想采用向量化实现并非易事,通常需要周密的思考。但当你熟练掌握向量化操作后,你会发现,这里面有固定的设计模式(对应少量的向量化技巧),可以灵活运用到很多不同的代码片段中。

中英文对照

逻辑回归 Logistic Regression
批量梯度上升法 batch gradient ascent
截距 intercept term
对数似然函数 the log likelihood
导函数 derivative
梯度 gradient

from: http://ufldl.stanford.edu/wiki/index.php/%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E7%9A%84%E5%90%91%E9%87%8F%E5%8C%96%E5%AE%9E%E7%8E%B0%E6%A0%B7%E4%BE%8B

Stanford UFLDL教程 逻辑回归的向量化实现样例相关推荐

  1. 逻辑回归的向量化实现样例

     逻辑回归的向量化实现样例 From Ufldl Jump to: navigation, search 我们想用批量梯度上升法对logistic回归分析模型进行训练,其模型如下: 让我们遵从公开 ...

  2. Stanford UFLDL教程 Softmax回归

    Softmax回归 Contents [hide] 1简介 2代价函数 3Softmax回归模型参数化的特点 4权重衰减 5Softmax回归与Logistic 回归的关系 6Softmax 回归 v ...

  3. Stanford UFLDL教程 主成分分析(PCA)

    Stanford UFLDL教程 主成分分析 Contents [hide] 1 引言 2 实例和数学背景 3 旋转数据 4 数据降维 5 还原近似数据 6 选择主成分个数 7 对图像数据应用PCA算 ...

  4. Stanford UFLDL教程 神经网络向量化

    神经网络向量化 在本节,我们将引入神经网络的向量化版本.在前面关于神经网络介绍的章节中,我们已经给出了一个部分向量化的实现,它在一次输入一个训练样本时是非常有效率的.下边我们看看如何实现同时处理多个训 ...

  5. 吴恩达深度学习 —— 2.13 逻辑回归的向量化

    我们先回顾逻辑回归的正向传播过程,如果有m个训练样本,对第一个样本进行预测,需要计算出z,并计算激活函数,计算第一个样本的y^\hat{y}y^​,如下所示:z(1)=wT∗x(1)+bz^{(1)} ...

  6. Stanford UFLDL教程 反向传播算法(BP算法)

    反向传播算法(BP算法) 假设我们有一个固定样本集 ,它包含  个样例.我们可以用批量梯度下降法来求解神经网络.具体来讲,对于单个样例,其代价函数为: 这是一个(二分之一的)方差代价函数.给定一个包含 ...

  7. Stanford UFLDL教程 深度网络概览

    深度网络概览 Contents [hide] 1概述 2深度网络的优势 3训练深度网络的困难 3.1数据获取问题 3.2局部极值问题 3.3梯度弥散问题 4逐层贪婪训练方法 4.1数据获取 4.2更好 ...

  8. Stanford UFLDL教程 从自我学习到深层网络

    从自我学习到深层网络 在前一节中,我们利用自编码器来学习输入至 softmax 或 logistic 回归分类器的特征.这些特征仅利用未标注数据学习获得.在本节中,我们描述如何利用已标注数据进行微调, ...

  9. Stanford UFLDL教程 实现主成分分析和白化

    实现主成分分析和白化 在这一节里,我们将总结PCA, PCA白化和ZCA白化算法,并描述如何使用高效的线性代数库来实现它们. 首先,我们需要确保数据的均值(近似)为零.对于自然图像,我们通过减去每个图 ...

最新文章

  1. 计算机专业i7 7500u,8550U比7500U提升多少 8550U和7500U的区别-太平洋电脑网
  2. PMCAFF微课堂|猎豹清理大师亿万用户量产品背后的紫牛方法论,傅盛不会说的秘密...
  3. 假如有人把支付宝存储服务器炸了(附文末福利)
  4. Python3文件操作详解 Python3文件操作大全
  5. python 服务端与c++客户端通讯_在C++与Python之间通信(IPC)
  6. JAVA-初步认识-第七章-构造函数和一般函数的区别
  7. 猴子偷桃php代码,C++实现猴子吃桃的示例代码
  8. 2021-07-05-日历
  9. BigAnt service大蚂蚁服务端
  10. R语言软件R Studio以及python下载函数包使用常见问题(持续更新中)
  11. uml活动图 各个功能的操作流程和分支_uml活动图
  12. Linux 搭建NodeBB社区,搭建CAS登录认证平台,实现Nodebb接入企业CAS认证(一)
  13. 中华名将索引 - 第一批:孙武
  14. mysql rds 主从_简单说说RDS的主从功能是如何实现
  15. 网易教育论坛:“状元”在美读大学:中国孩子都被教傻了
  16. 2022年门座式起重机司机考试模拟100题及模拟考试
  17. YUV12和YUV2格式
  18. excel透视表分组中展示为0的组
  19. kill -9 pid杀不死的进程
  20. 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用

热门文章

  1. 浅析工业级物联网项目的快速开发
  2. 从0到1建立一张评分卡之可视化分析
  3. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...
  4. 五、【线性表】线性表的链式表示和实现
  5. C++五子棋(七)——main函数以及项目总结
  6. linux bin模式,binlog有哪些工作模式?Linux云计算运维入门
  7. 学习笔记Hadoop(十一)—— Hadoop基础操作(3)—— MapReduce常用Shell操作、MapReduce任务管理
  8. android按钮最底,Android:点击按钮后布局上的动画,最低SDK版本为14
  9. poi获取段落位置_Apache POI:从java中的word文档(docx)中提取段落和后续表格
  10. SSH SecureShell Client的使用