当出现变量之间范围相差较大时,可以将其特征缩放标准化后,使梯度下降法的速度提高。
下面的作业题中,X数据的第一列代表房间的面积,第二列代表房间数。相差过大所以需要特征缩放
补充知识:标准差=根号方差。
默认是std(x,0,1),第二个位置0代表方差的分母是n,1代表方差分母是n-1,第三个位置,0代表按照行来计算标准差,1代表按列来计算标准差。
特征缩放函数 (x=(x-u平均值)/标准差)
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
mu = mean(X); % m.u中记录X的平均值
sigma = std(X); % X的标准差
X_norm = (X-repmat(mu,size(X,1),1))./repmat(sigma,size(X,1),1);
end
梯度下降函数,返回θ,J
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
theta = theta - alpha / m * X' * (X * theta - y);
J_history(iter) = computeCostMulti(X, y, theta);
end
end
代价函数,返回J到梯度函数里
function J = computeCostMulti(X, y, theta)
m = length(y); % number of training examples
J = 0;
J = sum((X * theta - y).^2) / (2*m);
end
主函数
clear ; close all; clc;
data