吴恩达机器学习总结:第二课 多变量线性回归(大纲摘要及课后作业)

为了更好的学习,充分复习自己学习的知识,总结课内重要知识点,每次完成作业后

都会更博。

英文非官方笔记

1.总结

    (1)符号设置:

       n 特征的数量

        m  样本数量

        Xi  样本i的向量型输入

        Xj 样本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);  % 计算

你可能感兴趣的:(个人学习)