• 线性回归之实践


    对于数据ex2Data.zip,学习出一个函数h(x),使之能较好地预测出y的值。

    其中x表示孩子的年龄,y表示孩子的身高。

    首先画出原始数据在坐标轴中的分布情况:

    x = load('ex2x.dat'); y = load('ex2y.dat');

    m = length(y); %计算出训练样本的个数

    % 绘出训练集
    figure; % 打开一个新的绘图窗口
    plot(x, y, 'o');
    ylabel('Height in meters')
    xlabel('Age in years')

    下面采用梯度下降进行线性回归:

    % 梯度下降
    x = [ones(m, 1) x]; % 这里添加一列是因为要学习的参数中有一个参数是h(x)中的常数项
    theta = zeros(size(x(1,:)))'; % 初始化参数
    MAX_ITR = 1500; % 迭代次数
    alpha = 0.07; % 学习率

    for num_iterations = 1:MAX_ITR


    % 梯度值
    grad = (1/m).* x' * ((x * theta) - y);

    % 根据梯度更新参数
    theta = theta - alpha .* grad;
    end
    % 在命令窗口显示学习出的参数
    theta

    % 绘制出线性拟合
    hold on;
    plot(x(:,2), x*theta, '-')
    legend('Training data', 'Linear regression');
    hold off ;

    学习出的参数为:

    theta =

    0.7502
    0.0639

    可以看出,所有样本点都大致分布在拟合出的直线附近。

    下面计算损失函数随着参数变化而变化的情况

    % 参数变化范围
    theta0_vals = linspace(-3, 3, 100);
    theta1_vals = linspace(-1, 1, 100);

    % 初始化损失函数
    J_vals = zeros(length(theta0_vals), length(theta1_vals));

    for i = 1:length(theta0_vals)
    for j = 1:length(theta1_vals)
    t = [theta0_vals(i); theta1_vals(j)];
    J_vals(i,j) = (0.5/m) .* (x * t - y)' * (x * t - y);
    end
    end

    J_vals = J_vals';
    % Surface plot
    figure;
    surf(theta0_vals, theta1_vals, J_vals)
    xlabel(' heta_0'); ylabel(' heta_1');

    可以看出我们拟合出的参数

    theta =

    0.7502
    0.0639

    基本上对应的损失函数最小的点。

    为了看得更加明显,可继续绘制出损失函数的等高线

    figure;
    contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 2, 15))
    xlabel(' heta_0'); ylabel(' heta_1');

    同样可以看出大致的损失函数最低点对应的参数theta,与我们拟合出的参数基本一致。

    总结:

    由此我们可以总结出线性回归,就是要学习出一个函数h(x) =θ(0) + θ(1)x(1)(2)x(2)+...+θ(m)x(m)

    对于上述训练集,这里h(x)就是y,我们的目的就是学习出参数θ(i)

    使得我们再给定x的时候我们能通过上述函数较为准确的得出y的值。

  • 相关阅读:
    C#调用C++ ---参数传递
    Retained Mode Versus Immediate Mode
    mind map in latex
    vk example
    基本环境
    [转]ld 和 ld.gold 和 ld.bfd
    [转] c++11 int&& 右值引用
    [转] c++11列表初始化
    [转] c++ const, volatile, mutable用法
    [转] c++11 模板元编程
  • 原文地址:https://www.cnblogs.com/90zeng/p/linear_regression_implement.html
Copyright © 2020-2023  润新知