逻辑回归的向量化实现样例
From Ufldl
Line 16: | Line 16: | ||
我们用Matlab/Octave风格变量x表示输入数据构成的样本矩阵,x(:,i)代表第 i个训练样本<math>x^{\left( i\right) }</math>,x(j,i)就代表<math>x_{j}^{\left( i\right) }</math>(译者注:第i个训练样本向量的第j个元素)。同样,用Matlab/Octave风格变量y表示由训练样本集合的全体类别标号所构成的行向量,则该向量的第i个元素y(i)就代表上式中的<math>y^{\left(i\right) }\in \left\{ 0,1\right\} </math>。(注意这里跟公开课程视频及CS229的符号规范不同,矩阵x按列而不是按行存放输入训练样本,同样,<math>y\in R^{1\times m}</math>是行向量而不是列向量。) | 我们用Matlab/Octave风格变量x表示输入数据构成的样本矩阵,x(:,i)代表第 i个训练样本<math>x^{\left( i\right) }</math>,x(j,i)就代表<math>x_{j}^{\left( i\right) }</math>(译者注:第i个训练样本向量的第j个元素)。同样,用Matlab/Octave风格变量y表示由训练样本集合的全体类别标号所构成的行向量,则该向量的第i个元素y(i)就代表上式中的<math>y^{\left(i\right) }\in \left\{ 0,1\right\} </math>。(注意这里跟公开课程视频及CS229的符号规范不同,矩阵x按列而不是按行存放输入训练样本,同样,<math>y\in R^{1\times m}</math>是行向量而不是列向量。) | ||
+ | |||
以下是梯度运算代码的一种实现,非常恐怖,速度极慢: | 以下是梯度运算代码的一种实现,非常恐怖,速度极慢: | ||
- | + | <syntaxhighlight lang="matlab"> | |
% 代码1 | % 代码1 | ||
grad = zeros(n+1,1); | grad = zeros(n+1,1); | ||
Line 45: | Line 46: | ||
但是,或许可以向量化得更彻底些。如果去除for循环,我们就可以显著地改善代码执行效率。特别的,假定b是一个列向量,A是一个矩阵,我们用以下两种方式来计算A*b: | 但是,或许可以向量化得更彻底些。如果去除for循环,我们就可以显著地改善代码执行效率。特别的,假定b是一个列向量,A是一个矩阵,我们用以下两种方式来计算A*b: | ||
- | + | <syntaxhighlight lang="matlab"> | |
% 矩阵-向量乘法运算的低效代码 | % 矩阵-向量乘法运算的低效代码 | ||
grad = zeros(n+1,1); | grad = zeros(n+1,1); | ||
Line 59: | Line 60: | ||
我们看到,代码2是用了低效的for循环语句执行梯度上升(译者注:原文是下降)运算,将b(i)看成(y(i) - sigmoid(theta'*x(:,i))),A看成x,我们就可以使用以下高效率的代码: | 我们看到,代码2是用了低效的for循环语句执行梯度上升(译者注:原文是下降)运算,将b(i)看成(y(i) - sigmoid(theta'*x(:,i))),A看成x,我们就可以使用以下高效率的代码: | ||
- | + | <syntaxhighlight lang="matlab"> | |
% 代码3 | % 代码3 | ||
grad = x * (y- sigmoid(theta'*x)); | grad = x * (y- sigmoid(theta'*x)); | ||
Line 72: | Line 73: | ||
- | + | ==中英文对照== | |
+ | |||
+ | :逻辑回归 Logistic Regression | ||
+ | :批量梯度上升法 batch gradient ascent | ||
+ | :截距 intercept term | ||
+ | :对数似然函数 the log likelihood | ||
+ | :导函数 derivative | ||
+ | :梯度 gradient | ||
==中文译者== | ==中文译者== | ||
- | 林锋(xlfg@yeah. | + | 林锋(xlfg@yeah.net),谭晓阳(x.tan@nuaa.edu.cn),邓亚峰(dengyafeng@gmail.com) |
+ | |||
+ | |||
+ | {{矢量化编程实现}} | ||
+ | |||
+ | |||
+ | {{Languages|Logistic_Regression_Vectorization_Example|English}} |