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

From Ufldl

Jump to: navigation, search
Line 19: Line 19:
以下是梯度运算代码的一种实现,非常恐怖,速度极慢:
以下是梯度运算代码的一种实现,非常恐怖,速度极慢:
-
:<syntaxhighlight lang="matlab">
+
<syntaxhighlight lang="matlab">
% 代码1
% 代码1
grad = zeros(n+1,1);
grad = zeros(n+1,1);
Line 45: Line 45:
但是,或许可以向量化得更彻底些。如果去除for循环,我们就可以显著地改善代码执行效率。特别的,假定b是一个列向量,A是一个矩阵,我们用以下两种方式来计算A*b:
但是,或许可以向量化得更彻底些。如果去除for循环,我们就可以显著地改善代码执行效率。特别的,假定b是一个列向量,A是一个矩阵,我们用以下两种方式来计算A*b:
-
:<syntaxhighlight lang="matlab">
+
<syntaxhighlight lang="matlab">
% 矩阵-向量乘法运算的低效代码
% 矩阵-向量乘法运算的低效代码
grad = zeros(n+1,1);
grad = zeros(n+1,1);
Line 59: Line 59:
我们看到,代码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">
+
<syntaxhighlight lang="matlab">
% 代码3
% 代码3
grad = x * (y- sigmoid(theta'*x));
grad = x * (y- sigmoid(theta'*x));

Revision as of 01:25, 29 March 2013

Personal tools