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

From Ufldl

Jump to: navigation, search

我们想用批量梯度上升法对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

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

  1. Stanford UFLDL教程 逻辑回归的向量化实现样例

    逻辑回归的向量化实现样例 我们想用批量梯度上升法对logistic回归分析模型进行训练,其模型如下: 让我们遵从公开课程视频与CS229教学讲义的符号规范,设 ,于是 ,, 为截距.假设我们有m个训练 ...

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

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

  3. 深度学习笔记(3) 向量化逻辑回归

    深度学习笔记(3) 向量化逻辑回归 1. 向量化运算的优势 2. 向量化编程 3. 举例 1. 向量化运算的优势 python的向量化运算速度快,是非常基础的去除代码中for循环的艺术 可以看出相同的 ...

  4. 吴恩达《深度学习专项》笔记+代码实战(二):简单的神经网络——逻辑回归

    这堂课要学习的是逻辑回归--一种求解二分类任务的算法.同时,这堂课会补充实现逻辑回归必备的数学知识.编程知识.学完这堂课后,同学们应该能够用Python实现一个简单的小猫辨别器. 前排提示:本文篇幅较 ...

  5. 逻辑回归算法梳理-2

    机器学习初级算法梳理二 任务二:逻辑回归算法梳理 1.逻辑回归与线性回归的联系与区别 1.1 相同点 1.2 不同点 2. 逻辑回归的原理 3.逻辑回归损失函数推导及优化 3.1 推导 3.2 优化 ...

  6. 二、逻辑回归算法梳理

    1.逻辑回归与线性回归的联系与区别 联系 逻辑回归与线性回归都属于广义线性回归模型 区别 因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归.logistic回归的因 ...

  7. 吴恩达深度学习 —— 2.14 向量化逻辑回归的梯度输出

    这一节将学习如果向量化计算m个训练数据的梯度,强调一下,是同时计算. 前面已经说过,在逻辑回归中,有dz(1)=a(1)−y(1)dz^{(1)}=a^{(1)}-y^{(1)}dz(1)=a(1)− ...

  8. R以逻辑回归为例介绍制作列线图(nomogram)的过程

    R以逻辑回归为例介绍制作列线图(nomogram)的过程 目录 R以逻辑回归为例介绍制作列线图(nomogram)的过程 列线图

  9. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

最新文章

  1. 置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算?
  2. 项目管理 - 学习总目录
  3. 机器学习实战-决策树-22
  4. Android RecyclerView详解
  5. CCNA课堂练习:OSPF的介绍及配置
  6. margin相关技巧
  7. 检测php加密方式,一种php加密方式
  8. 软件工程中需要学习和掌握的软件都有哪些_9个B端产品经理需要懂的技术
  9. 【codevs4228】小猫爬山(最优化剪枝)
  10. 计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题
  11. 苹果手机密码锁如何解锁
  12. 自行设计开源的pdf转word软件(python开发设计)
  13. echart获取geoJson格式世界各国地图的资源,世界地图,世界各国分区显示,精确到乡镇一级资源
  14. 挖掘数百万参与的IMVU用户
  15. [转载]提升你幽默感的100句经典短语
  16. 2016年中国未来的新兴行业推荐
  17. linux如何使用帮助文档快速学习
  18. Redis-命令操作Redis
  19. PPPOE拨号经常掉线问题
  20. 如何用命令批量重命名文件

热门文章

  1. python之numpy基础_Python知识普及:Numpy基础操作
  2. Android:安卓工程结构介绍
  3. ks检验正态分布结果_统计学里的数据正态性检验
  4. c++ vector iterator
  5. 基于xgboost 的贷款风险预测
  6. 118. Leetcode 392. 判断子序列 (动态规划-子序列问题)
  7. 在单链表和双链表中删除倒数第K个节点
  8. 机器学习笔记:auto encoder
  9. 听说你想去大厂看妹子,带你看看腾讯产品运营岗超详细面经
  10. R语言实战应用精讲50篇(三)-多重线性回归系列之模型评估与诊断应用案例