没有特征归一化的MATLAB梯度下降速度更快

时间:2018-07-04 19:26:26

标签: matlab machine-learning linear-regression gradient-descent

我正在MATLAB中实现简单的多元线性回归。我的实现包括数据的特征归一化,本质上是:对于特征x(i),设置x(i) = (x(i) - μ)/σ,其中μσ是平均值,每个特征值的范围。

我对代码的运行时进行了基准测试,似乎每当我应用功能标准化时,性能就会更快。 (我尝试了几种不同的训练数据集。) 由于规范化是为了加快代码的速度,因此,我将感谢提供任何帮助,指出实施中出了什么问题。

function [Theta, cost] = linearRegression(Trainset, max_cost)
% LINEAR REGRESSION - Given trainset and desired maximum cost for linear
% model, use gradient descent to return optimized Theta and its cost.

%% INITIALIZATION
m = size(Trainset,1); n = size(Trainset,2)-1;
X = [ones(m,1), Trainset(:,1:n)]; % X = <Mx(N+1)>
Y = Trainset(:,n+1); % Y = <Mx1>
Theta = zeros(1, n+1); % Theta = <1x(N+1)>
alpha = optimizeAlpha(X, Y);

%% FEATURE NORMALIZATION
avg = mean(X(:,2:n+1)); rng = range(X(:,2:n+1));
X(:,2:n+1) = (X(:,2:n+1) - repmat(avg, [m,1]))./(repmat(rng, [m,1]));

%% METHODS
% J - Cost function (sum of squared errors)
% GD - A single step in gradient descent
J=@(X, Y, Theta) (1/2/m)*sum((X*Theta' - Y).^2);
GD=@(X, Y, Theta, alpha) Theta - (alpha/m)*(X*Theta' - Y)'*X;

%% APPLY GRADIENT DESCENT UNTIL CONVERGENCE
while (J(X, Y, Theta) > max_cost),
    Theta = GD(X, Y, Theta, alpha);
end

cost = J(X, Y, Theta);
end

(旁注:optimizeAlpha是我写的一种帮助方法,用于选择相对较大的学习率alpha,但仍足够小以确保梯度下降会收敛。如果您认为这与我的问题有关,那么我'还将包括该方法的代码。)

非常感谢!

0 个答案:

没有答案