机器学习实验报告——Linear Regression
2014-06-30 23:16
996 查看
机器学习实验报告——Linear Regression
一、 实验要求
要求用梯度下降法对给定的数据X,Y进行线性拟合。给出迭代次数,拟合曲线。
二、 实验思路
模型的建立:
估计函数的假设:
其中,X为输入变量,θ为参数。
假设误差估计函数(error function)为J,我们的目标便是寻找合适的参数θ,使得误差函数J最小化。
调整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),梯度下降法(gradient descent),牛顿法(Newton’s Method)等,每种方法都有各自的优缺点。
三、 梯度下降法
在选定线性回归模型后,只需要确定参数θ,就可以将模型用来预测。然而θ需要在J(θ)最小的情况下才能确定。因此问题归结为求极小值问题,使用梯度下降法。梯度下降法最大的问题是求得有可能是全局极小值,这与初始点的选取有关。
梯度下降法步骤:
(1)初始化θ;
(2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。
梯度方向由J(θ)对θ的偏导数确定,由于求的是极小值,因此梯度方向是偏导数的反方向。结果为
所以θ的更新公式为:
其中a为步长因子,其取值要适中,太小的时收敛速度太慢,太大时有可能跳过最优解。
四、 算法实现
1. 选取参数theta0=0.75 theta1=1.65作为初始值。
2. 步长因子alpha=0.001(以上选取经试验验证有更好的收敛效果)
3. 按照梯度下降算法步骤更新theta值,设置循环次数为500次,当前j值与上一次循环得到的j值的欧式距离小于0.001时认为算法收敛,跳出循环。
4. 带入假设函数可得回归曲线。
五、 试验结果
theta0=0.8284
theta1=2.0404
j=0.1457
实际迭代次数4
回归曲线如图:
六、 实验代码
clc;
clear;
load shuju.mat;
plot(X,Y,'.');
hold;
syms theta0 theta1 alpha;
theta0=0.75;
theta1=1.65;
alpha=0.001;
j=0;
for q=1:500
J=j;
j=0;
for i=1:21
j=j+0.5*(theta0+theta1*X(i)-Y(i))^2;
end
j=j/21;
if sqrt((j-J)^2)<0.001
break;
end
theta0=theta0-alpha*0.5*(theta0*theta1*X(i)-Y(i));
theta1=theta1-alpha*0.5*(theta0*theta1*X(i)-Y(i))*X(i);
end
y=theta0+theta1*X;
plot(X,y)
j
theta0
theta1
J
一、 实验要求
要求用梯度下降法对给定的数据X,Y进行线性拟合。给出迭代次数,拟合曲线。
二、 实验思路
模型的建立:
估计函数的假设:
其中,X为输入变量,θ为参数。
假设误差估计函数(error function)为J,我们的目标便是寻找合适的参数θ,使得误差函数J最小化。
调整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),梯度下降法(gradient descent),牛顿法(Newton’s Method)等,每种方法都有各自的优缺点。
三、 梯度下降法
在选定线性回归模型后,只需要确定参数θ,就可以将模型用来预测。然而θ需要在J(θ)最小的情况下才能确定。因此问题归结为求极小值问题,使用梯度下降法。梯度下降法最大的问题是求得有可能是全局极小值,这与初始点的选取有关。
梯度下降法步骤:
(1)初始化θ;
(2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。
梯度方向由J(θ)对θ的偏导数确定,由于求的是极小值,因此梯度方向是偏导数的反方向。结果为
所以θ的更新公式为:
其中a为步长因子,其取值要适中,太小的时收敛速度太慢,太大时有可能跳过最优解。
四、 算法实现
1. 选取参数theta0=0.75 theta1=1.65作为初始值。
2. 步长因子alpha=0.001(以上选取经试验验证有更好的收敛效果)
3. 按照梯度下降算法步骤更新theta值,设置循环次数为500次,当前j值与上一次循环得到的j值的欧式距离小于0.001时认为算法收敛,跳出循环。
4. 带入假设函数可得回归曲线。
五、 试验结果
theta0=0.8284
theta1=2.0404
j=0.1457
实际迭代次数4
回归曲线如图:
六、 实验代码
clc;
clear;
load shuju.mat;
plot(X,Y,'.');
hold;
syms theta0 theta1 alpha;
theta0=0.75;
theta1=1.65;
alpha=0.001;
j=0;
for q=1:500
J=j;
j=0;
for i=1:21
j=j+0.5*(theta0+theta1*X(i)-Y(i))^2;
end
j=j/21;
if sqrt((j-J)^2)<0.001
break;
end
theta0=theta0-alpha*0.5*(theta0*theta1*X(i)-Y(i));
theta1=theta1-alpha*0.5*(theta0*theta1*X(i)-Y(i))*X(i);
end
y=theta0+theta1*X;
plot(X,y)
j
theta0
theta1
J
相关文章推荐
- 机器学习实验报告:利用3层神经网络对CIFAR-10图像数据库进行分类
- 第三周实验报告(2)
- c++程序设计实验报告——任务(二)
- 第十五周实验报告(任务二)
- 第二周实验报告2
- 第二周实验报告(任务一)
- C++第3次实验(基础班)—选择结构程序设计(上机报告)
- 《第二周实验报告1-2》
- 机器学习实验(九):基于高斯分布和OneClassSVM的异常点检测
- 第二周实验报告累乘
- 十五周实验报告1:学会冒泡排序算法
- C# 实验报告一 枚举 结构体
- (第二周实验报告1-2)运用数组实现十进制转化为二进制
- 20145211 《Java程序设计》实验报告三:敏捷开发与XP实践
- 第三周实验报告2
- 20145129实验报告(三)
- 第三周实验报告(1)
- C++第二次实验-实验报告
- 20145333《Java程序设计》第3次实验报告
- Linux:Sendmail-实验报告