• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

山东大学机器学习实验1

武飞扬头像
Deep_Dreamer
帮助1

  1. 实验内容

下载ex1Data.zip,并从zip文件中提取这些文件。这些文件包含了一些测量两到8岁之间不同男孩身高的例子。y值是以米为单位测量的高度,x值是与身高对应的男孩的年龄。每个身高和年龄元组在我们的数据集中构成了一个训练示例(x(i),y(i)。有m=50个训练示例,您将使用它们来开发一个线性回归模型。

学新通
学新通
  1. 第一次迭代后的值:θ0=0.0745,θ1=0.3543

  1. 最终得到的值:θ0=0.7501,θ1=0.0639

  1. 预测的身高:

3.5岁:0.9738m≈1.0m

7岁:1.1973m≈1.2m

  1. 通过本次实验,熟悉了建立线性回归模型的基本流程,掌握了梯度下降的方法,课后也学习了基本matlab知识,感觉对自己的帮助很大,希望之后的实验能够更准确的做出来。

  1. 由于刚开始接触梯度下降,上网看了一些教程和吴恩达教授的讲解,感觉明白了梯度下降的含义,弄明白了公式的意义,也学到了一些技巧,比如特征缩放,和如何选取学习率,变量应该同时更新值等等。

  1. 关于学习率的问题,在这里总结一下。学习率是控制你每一次迭代后,值变化的大小。若学习率太小,则会需要迭代很多次才能到达最佳,这其中的时间太漫长。若学习率太大,则会跨过最佳值,经过反复迭代可能会远离最佳值。

1.加载训练集

x = load('ex1x.dat');

y = load('ex1y.dat');

2.绘制训练集

figure % open a new figure window

plot (x , y , ' o ' );

ylabel ( ' Height in meters ' );

xlabel ( 'Age in years ' );

3.利用梯度下降迭代

m = length(y) ; % store the number of training examples

x = [ones(m,1),x] ; % Add a column of ones to x

alpha = 0.07;

theta0(1,1) = 0;

theta1(1,1) = 0;

maxIter = 1500;

tol = 1e-8;

for i = 1:maxIter

theta0(i 1,1) = theta0(i,1) - alpha*(1/m)*sum((theta0(i,1).*x(:,1) theta1(i,1).*x(:,2)- y).*x(:,1));

theta1(i 1,1) = theta1(i,1) - alpha*(1/m)*sum((theta0(i,1).*x(:,1) theta1(i,1).*x(:,2)- y).*x(:,2));

theta_before = [theta0(i,1);theta1(i,1)];

theta_now = [theta0(i 1,1);theta1(i 1,1)];

J_before = (0.5/m)*sum(x*theta_before - y);

J_now = (0.5/m)*sum(x*theta_now - y);

if abs(J_now - J_before) < tol

break;

end

end

hold on;

plot( x(:,2),theta0(i 1,1) x(:,2)*theta1(i 1,1),'-');

legend( ' Training data ' , ' Linear regression ' );

4.理解损失函数

J_vals = zeros (100 , 100) ; % initialize Jvals to

% 100*100 matrix of 0's

theta0_vals = linspace (-3 , 3 , 100) ;

theta1_vals = linspace (-1 , 1 , 100) ;

% 对于linespace(x1,x2,N),其中x1、x2、N分别为起始值、终止值、元素个数。

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'; %转置

figure ;

surf(theta0_vals,theta1_vals,J_vals);

xlabel ('\theta_0 ');ylabel('\theta_1');

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfikheg
系列文章
更多 icon
同类精品
更多 icon
继续加载