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

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

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

\begin{align}h_\theta(x) = \frac{1}{1+\exp(-\theta^Tx)},\end{align}

让我们遵从公开课程视频与CS229教学讲义的符号规范,设 \textstyle x_0=1,于是x\in R^{n+1} ,\theta \in R^{n+1}, \textstyle \theta_0 为截距。假设我们有m个训练样本{(x^\left( 1\right) ,y^\left( 1\right) ) ,...,(x^\left( m\right) ,y^\left( m\right) )},而批量梯度上升法的更新法则是:\theta :=\theta +\alpha \nabla _{\theta }l\left( \theta \right)  ,这里的 l\left( \theta \right)  是对数似然函数,\nabla _{\theta }l\left( \theta \right)  是其导函数。

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

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

\begin{align}\nabla_\theta \ell(\theta) = \sum_{i=1}^m \left(y^{(i)} - h_\theta(x^{(i)}) \right) x^{(i)}_j.\end{align}

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


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

% 代码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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数模笔记-NetworkX(2)最短路径

1、最短路径问题的常用算法 最短路径问题是图论研究中的经典算法问题&#xff0c;用于计算图中一个顶点到另一个顶点的最短路径。 欢迎关注 Youcans 原创系列&#xff0c;每周更新数模笔记 Python数模笔记-PuLP库 Python数模笔记-StatsModels统计回归 Python数模笔记-Sklearn…

神经网络向量化

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

Python数模笔记-NetworkX(3)条件最短路径

1、带有条件约束的最短路径问题 最短路径问题是图论中求两个顶点之间的最短路径问题&#xff0c;通常是求最短加权路径。 条件最短路径&#xff0c;指带有约束条件、限制条件的最短路径。例如&#xff0c;顶点约束&#xff0c;包括必经点或禁止点的限制&#xff1b;边的约束&…

简单技能之程序调试入门

简单技能之程序调试入门 黑盒测试 等价类划分

Python数模笔记-NetworkX(4)最小生成树

1、生成树和最小生成树 1.1 生成树 连通的无圈图称为树&#xff0c;就是不包含循环的回路的连通图。 对于无向连通图&#xff0c;生成树&#xff08;Spanning tree&#xff09;是原图的极小连通子图&#xff0c;它包含原图中的所有 n 个顶点&#xff0c;并且有保持图连通的最…

Python数模笔记-NetworkX(5)关键路径法

关键路径法&#xff08;Critical path method&#xff0c;CPM&#xff09;是一种计划管理方法&#xff0c;通过分析项目过程中工序进度安排寻找关键路径&#xff0c;确定最短工期&#xff0c;广泛应用于系统分析和项目管理。 1、拓扑序列与关键路径 1.1 拓扑序列 一个大型工程…

Python小白的数学建模课-01.新手必读

Python 完全可以满足数学建模的需要。 Python 是数学建模的最佳选择之一&#xff0c;而且在其它工作中也无所不能。 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 欢迎关注『Python小白的数学建模课 Youcans』系列&#xff0c;每周持续更新 Python小白…

Python的数学建模课-02.数据导入

数据导入是所有数模编程的第一步&#xff0c;比你想象的更重要。 先要学会一种未必最佳&#xff0c;但是通用、安全、简单、好学的方法。 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 1. 数据导入是所有数模编程的第一步 编程求解一个数模问题&#…

UFIDL稀疏自编码代码实现及解释

UFIDL稀疏自编码代码实现及解释 1.今天我们来讲一下UFIDL的第一个练习。 1.我们来看看最难的一个.m文件 %% ---------- YOUR CODE HERE -------------------------------------- % Instructions: Compute the cost/optimization objective J_sparse(W,b) for the Sparse Aut…

Python小白的数学建模课-A2.2021年数维杯C题(运动会优化比赛模式探索)探讨

关注收藏&#xff0c;国赛再会。 运动会优化比赛模式问题&#xff0c;是公平分配问题。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 2021第六届数维杯大学生数学建模 赛题已于5月27日公布&#xff0c;C题是"运动会优化比赛模式探索"。本文对…

Python小白的数学建模课-03.线性规划

线性规划是很多数模培训讲的第一个算法&#xff0c;算法很简单&#xff0c;思想很深刻。 要通过线性规划问题&#xff0c;理解如何学习数学建模、如何选择编程算法。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 1. 求解方法、算法和编程方案 线性规…

Python小白的数学建模课-A1.国赛赛题类型分析

分析赛题类型&#xff0c;才能有的放矢。 评论区留下邮箱地址&#xff0c;送你国奖论文分析 『Python小白的数学建模课 Youcans』 带你从数模小白成为国赛达人。 1. 数模竞赛国赛 A题类型分析 年份题目要求方法2020A炉温曲线建立温度模型&#xff0c;计算炉温曲线&#xff…

白话(whitening)

白化 Contents [hide]1 介绍2 2D 的例子3 ZCA白化4 正则化5 中英文对照6 中文译者 介绍 我们已经了解了如何使用PCA降低数据维度。在一些算法中还需要一个与之相关的预处理步骤&#xff0c;这个预处理过程称为白化&#xff08;一些文献中也叫sphering&#xff09;。举例来说&…

Python小白的数学建模课-04.整数规划

整数规划与线性规划的差别只是变量的整数约束。 问题区别一点点&#xff0c;难度相差千万里。 选择简单通用的编程方案&#xff0c;让求解器去处理吧。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 1. 从线性规划到整数规划 1.1 为什么会有整数规划&…

实现主成分分析和白化

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

Python小白的数学建模课-05.0-1规划

0-1 规划不仅是数模竞赛中的常见题型&#xff0c;也具有重要的现实意义。 双十一促销中网购平台要求二选一&#xff0c;就是互斥的决策问题&#xff0c;可以用 0-1规划建模。 小白学习 0-1 规划&#xff0c;首先要学会识别 0-1规划&#xff0c;学习将问题转化为数学模型。 『…

mac下一些终端命令的使用

mac基础终端命令入门作为一名编程人员&#xff0c;&#xff08;叫程序猿显得屌丝&#xff0c;叫攻城狮感觉还达不到&#xff09;&#xff0c;我经常看到许多大神在终端里面进行一些神操作。鉴于此&#xff0c;我今天就百度了一下&#xff0c;别问我为什么不Google&#xff0c;穷…

Python小白的数学建模课-06.固定费用问题

Python 实例介绍固定费用问题的建模与求解。 学习 PuLP工具包中处理复杂问题的快捷使用方式。 『Python小白的数学建模课 Youcans』带你从数模小白成为国赛达人。 前文讲到几种典型的 0-1 规划问题&#xff0c;给出了 PuLP 求解的案例。由于 0-1 规划问题种类很多&#xff0…

Python小白的数学建模课-07.选址问题

选址问题是要选择设施位置使目标达到最优&#xff0c;是数模竞赛中的常见题型。 小白不一定要掌握所有的选址问题&#xff0c;但要能判断是哪一类问题&#xff0c;用哪个模型。 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法。 欢迎关注『Python小白的数学建模…