为了更好的学习,充分复习自己学习的知识,总结课内重要知识点,每次完成作业后
都会更博。
英文非官方笔记
1.总结
(1)符号设置:
n 特征的数量
m 样本数量
Xi 样本i的向量型输入
Xji 样本i的第j个特征
hθ(x) = θ0x0 + θ1x1 + θ2x2 + θ3x3 + θ4x4
hθ(x) =θT X
(2)多变量的梯度下降法:
代价函数
梯度下降
(3)梯度下降实践1:特征缩放:
梯度下降会更快、等高线会更加像一个圆;
缩放后,每个特征最好在-1~1之间;
-3~3也很好,更大就不好了,-1/3~1/3也很好,再小就不好了;
均值归一化: μ为均值,s为标准差
(4)学习率α
a.确保梯度下降在工作(画出代价函数J与迭代次数的曲线,看J是否单调递减)
迭代次数可以选择30,3000 , 3000000;
b.J曲线如果是一个波浪形,则选择更小的学习率α;
c.学习率α太小会导致运行太慢;
d.α可以取0.001, 0.003, 0.01 ,0.03, 0.1, 0.3;
(5)特征多项式回归
(6)正规方程
正规方程和梯度下降对比:
a.梯度下降
需要选择学习率;
需要很多次迭代,可能会导致更慢;
即使n(百万级)很大时,也能工作很好(更适合大量数据,n>10000);
b.正规方程
无需选择学习率;
无需迭代以及检查收敛;
需要计算(XT X)-1
n很大时候,会很慢
2.课后作业
(1)数据拆分,归一化处理
clear ; close all; clc
data = load('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
%定义特征缩放函数
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);
sigma = std(X);
X_norm = (X - repmat(mu,size(X,1),1))./ repmat(sigma,size(X,1),1);
end
[X mu sigma] = featureNormalize(X);%调用特征缩放函数
X = [ones(m, 1) X];
(2)梯度下降及价格预测
%初始化参数
alpha = 0.02;
num_iters = 400;
theta = zeros(3, 1);
%定义梯度下降函数
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
%调用函数
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters);
figure;
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
%价格预测
price = [1 (([1650 3]-mu)./sigma)]*theta; % You should change this
(3)正规方程
data = csvread('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y);
X = [ones(m, 1) X]; % 增加一个列向量到X
%定义正则方程函数
function [theta] = normalEqn(X, y)
theta = zeros(size(X, 2), 1);
theta = pinv (X' * X) * X' * y;
end
theta = normalEqn(X, y); % 计算