实验内容

1.根据梯度下降法完成一元线性回归实验。
2.根据闭式解完成一元线性回归实验。
3.比较两种解下的实验结果。

实验代码

clear;clc;
%% 数据导入;划分训练集和测试集
% 数据导入
data=load("ex1data1.txt");
X=data(:,1);
Y=data(:,2);
% 划分训练集和测试集
ind=[];Train_ind=[];Test_ind=[];    % 随机数索引;训练集索引;测试集索引
ind=randperm(length(X));
Train_ind=ind(1:round(length(ind)*(2/3)));  % 训练集样本索引
Test_ind=ind(round(length(ind)*(2/3))+1:end);   % 测试集样本索引
Xtrain=X(Train_ind,:);     % X中的训练样本
Xtest=X(Test_ind,:);       % X中的测试样本
Ytrain=Y(Train_ind,:);     % Y中的训练样本
Ytest=Y(Test_ind,:);       % Y中的测试样本
%% 梯度下降求解一元线性回归
m=length(Xtrain);
X_train1=[ones(m,1),Xtrain];
theta=zeros(2,1);
iterations=1500;    % 设置迭代次数为1500
alpha=0.01;         % 设置梯度下降步长为0.01
[theta_1, J_history] = gradientDescent(X_train1, Ytrain, theta, alpha, iterations);
%% 闭式解求解一元线性回归
[w,b] = closed_formSolution(Xtrain,Ytrain);
theta_2=[b;w];
%% 绘制两种方法的图像
scatter(Xtrain,Ytrain); % 绘制真实数据的散点图
hold on;
x=0:1:25;
y1=theta_1(2,1).*x+theta_1(1,1);    % 梯度下降求解的y1函数
y2=theta_2(2,1).*x+theta_2(1,1);    % 闭式解求解的y2函数
plot(x,y1,'-xb',x,y2,':.r');    % 绘制y1和y2的图像
xlabel('x');
ylabel('y');
legend('真实数据点:(x,y)','梯度下降求解:y=1.1816x-3.5597','闭式解求解:y=1.2114x-3.8586','best');
%% 使用均方误差衡量两种方法的优劣
Ytest_predict1=theta_1(2,1).*Xtest+theta_1(1,1);    % 使用梯度下降求解得到的测试集的预测值
Ytest_predict2=theta_2(2,1).*Xtest+theta_2(1,1);    % 使用闭式解求解得到的测试集的预测值
mse=zeros(2,1);
mse(1,1)=sum((Ytest_predict1-Ytest).^2,1);  % 梯度下降的均方误差
mse(2,1)=sum((Ytest_predict2-Ytest).^2,1);  % 闭式解的均方误差%% **********************函数一(梯度下降)*********************
%定义一个实现梯度下降的函数
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y);%取数据的长度
J_history = zeros(num_iters, 1);%定义J_history为num_iters行1列的向量
%其中,num_iters是在调用该梯度下降函数时的参数
for iter = 1:num_itersS = (1 / m) * (X' * (X * theta - y));%相当于求导theta = theta - alpha .* S;%theta的更新J_history(iter) = computeCost(X, y, theta);%在这里调用computeCost(X, y, theta)%相当于在慢慢的减小代价函数
end
endfunction J = computeCost(X, y, theta)
% 函数功能:求代价函数
m = length(y); % y的数据量
J = 0;
% 求h(x)
h = X*theta;
loss = (h-y).^2;
J = 1/(2*m)*(X*theta-y)'*(X*theta-y);
end%% **********************函数二(闭式解)*********************
function [w,b] = closed_formSolution(X,Y)
% 函数功能:闭式解求出一元线性回归函数Y=ωX+b中的ω和b
% 输入参数:X表示自变量;Y表示因变量
% 函数返回值:w表示自变量X的系数;b表示常量m=length(X);    % 取X的长度,X_mean=mean(X,1);
tmp=repmat(X_mean,m,1);
w_top=sum(Y.*(X-tmp),1);
w_bottom=sum(X.*X,1)-(sum(X,1))^2/m;
w=w_top/w_bottom;b=sum(Y-w*X,1)/m;
end

实验结果

实验心得

通过本次“线性回归实验”,加深了我对梯度下降和闭式解两种方法的理解,并且能够熟练使用。在回归任务的度量中,可以使用均方误差。绘制散点图时,可以使用scatter函数。

【MATLAB】机器学习: 线性回归实验(梯度下降+闭式解)相关推荐

  1. 机器学习-线性回归与梯度下降

    线性回归 linear regression 符号定义 notation,仅为本教程中的符号定义. \(m\) 训练集中样本的数量 \(x\) 输入值,features. \(x^{(i)}\),表示 ...

  2. 机器学习(机器学习+线性回归+代价函数+梯度下降)

    一.什么是机器学习 一个计算机程序据说从经验 E 学习关于 一些任务 T 和一些性能措施 P,如果它在 T 上的性能, 由 P 测量,随着经验 E 的提高, 体验 E 将是 让程序玩成千上万的游戏本身 ...

  3. 训练线性回归模型 --- “闭式”解方法、梯度下降(GD)

    目录 1.训练前你需要了解 简单说,线性模型就是对输入特征加权求和,再加上一个我们称为偏置项(也称为截距项)的常数 向量化的形式: 训练模型就是设置模型参数直到模型最拟合训练集的过程. 常见的性能指标 ...

  4. 机器学习01-定义、线性回归、梯度下降

    目录 一.定义 What is Machine Learning 二.建模 Model Representation 三.一元线性回归 Linear Regression with One Varia ...

  5. 机器学习第4天:线性回归及梯度下降

    文章目录 一.简单线性回归(即一元线性回归) 二.代价函数 数学表达式: 代码实现: 实例说明 三.梯度下降 数学表达式: 具体方法 代码实现: 代价随迭代次数的变化 一.简单线性回归(即一元线性回归 ...

  6. 【机器学习基础】线性回归和梯度下降的初学者教程

    作者 | Lily Chen 编译 | VK 来源 | Towards Data Science 假设我们有一个虚拟的数据集,一对变量,一个母亲和她女儿的身高: 考虑到另一位母亲的身高为63,我们如何 ...

  7. 用懊悔法学习吴恩达机器学习【2】-----线性回归的梯度下降

    以下英文文档皆出自课程配套笔记 课9 代价函数二 这一课时考虑使用两个参数来描述代价函数.此时等价函数是一个碗形,碗底点为最小值,将碗形用等高线表示,等高线中心就是代价函数的最小值.所以距离等高线中心 ...

  8. 吴恩达机器学习(六)线性回归的梯度下降

    文章目录 1.先导知识 2.线性回归的梯度下降 1.先导知识 之前学习的内容: 2.线性回归的梯度下降 我们要做的是将梯度下降法应用到最小化平方差代价函数, 我们解决过的梯度下降问题之一就是它容易陷入 ...

  9. 机器学习(1)之梯度下降(gradient descent)

    机器学习(1)之梯度下降(gradient descent) 题记:最近零碎的时间都在学习Andrew Ng的machine learning,因此就有了这些笔记. 梯度下降是线性回归的一种(Line ...

最新文章

  1. 【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
  2. wxWidgets:wxStringTokenizer类用法
  3. 《Python从小白到大牛》简介
  4. JS中的(IIFE)(立即调用函数)
  5. 【指标需求思考】如何做好指标类需求建设
  6. wget: command not found
  7. 云计算时代下的数据中心运维之路
  8. TensorFlow笔记(5) 多元线性回归
  9. html5移动端转盘,基于zepto适合移动端的幸运大转盘插件
  10. 华为路由器isis配置实例_华为isis协议配置实例
  11. Windowsmobile 的第一篇 为什么选择windows mobile 的分析
  12. matlab 求信号频率响应,基于MATLAB的频率响应
  13. ESP8266学习笔记(3)——GPIO接口使用
  14. Postman INTERCEPTOR DISCONNECTED
  15. cesium 剖面 火星_Cesium之地图研究
  16. 西安80坐标系转经纬度坐标系教程
  17. 教你如何用免费软件来发布活动直播
  18. TerraMaster TOS 远程命令执行(CVE-2022-24989)TerraMaster TOS 敏感信息泄露(CVE-2022-24990)
  19. Layabox学习笔记
  20. 计算机移动存储设备是,移动存储器在计算机操作系统安装中的应用

热门文章

  1. 对于Google Earth Engine的介绍
  2. java 二叉树 红黑树_常见数据结构(二)-树(二叉树,红黑树,B树)
  3. GPhone Android
  4. ROS gazebo报错:ERROR: cannot launch node of type [mbot_teleop/mbot_teleop.py]
  5. GEE数据集:ERA5 每日汇总 - 由 ECMWF / Copernicus Climate Change Service制作的最新气候再分析数据集
  6. 一次调频matlab仿真,基于Matlab的大型火电机组一次调频特性仿真.pdf
  7. 全志h6对比晶晨s905_晶晨S905X3和晶晨S912两个芯片哪个好?差距表现在什么地方?...
  8. Codeforces1395 D. Boboniu Chats with Du(贪心)
  9. linux中bridge简介
  10. java-php-python-ssm基于用户行为的自动化书籍推荐系统计算机毕业设计