【机器学习笔记4】Stanford公开课Exercise 3——Multivariate Linear Regression

Stanford公开课Exercise 3原题地址:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex3/ex3.html,下面是我完成的笔记。



第一部分,gradient descent方法


(一)原理回顾


简单重复一下gradient descent实现的过程,具体的看前面的文章(【机器学习笔记2】Linear Regression总结):

1. h(θ)函数

(公式1)

2. J(θ)函数

(公式2)

向量化后简化为:

(公式3)

3.θ迭代过程

(公式4)

向量化后简化为:

(公式5)

4. Feature Scaling

将不同特征的取值转换到差不多的范围内,具体做法是:特征值减去该组特征值的均值,然后除以该组特征值的标准差,将所有特征值归一化至[-1,1]的范围。
(公式6)


(二)实现代码


%=================================================================
% Exercise 3: Multivariate Linear Regression (gradient descent)
% author : liubing (liubing80386@163.com)
%

%LB_c: 加载数据 ===============
x = load("ex3x.dat");
y = load("ex3y.dat");
%LB_c: 矩阵x第一列加上全1
x = [ones(size(x)(1),1), x];
%==============================

%LB_c: scaling(缩放到相同范围),参考上面的(公式6)
sigma = std(x);	%x按列求标准差
mu = mean(x);	%x按列求均值
%第2、3列scaling(第1列全为1,不用做)
x(:,2) = (x(:,2) - mu(2)) ./ sigma(2);
x(:,3) = (x(:,3) - mu(3)) ./ sigma(3);
%==================================================

%LB_c: 常量数据准备=============================================================
%theta更新的迭代次数
iter_total = 50;	
%m为样本数,n为特征数(包含第一列的常数项,实际特征数为n-1)
[m,n] = size(x);	
%学习率的不同取值,共7个,实验结果表明前6个收敛,最后一个发散
alpha = [0.01, 0.03, 0.1, 0.3, 1, 1.3, 1.4];	
%对应不同学习率结果绘制的属性
plot_arg  = ['c', 'r', 'g', 'b', 'm', 'k', 'r', 'b'];
alpha_total = length(alpha);	%不同学习率种数
theta_arr = zeros(alpha_total, n);	%存储所有alpha值对应的theta结果
%===============================================================================

%LB_c ==========================================================================
%尝试不同的alpha值,绘制J值迭代趋势,theta结果保存到theta_arr中
figure;
title("J(theta) converge");
xlabel('iteration (times)');
ylabel('J(theta)');
for alpha_index = [1:alpha_total]

	theta = zeros(n,1);	%theta初始化为全0,其他值也可以
	J = zeros(iter_total,1);	%存储每一步迭代的J(theta)值
	
	%迭代过程
	for iter_index = [1:iter_total]		
		J(iter_index) = (x*theta-y)' * (x*theta-y) / (2*m);	%求当前的J(theta),参考上面的(公式3)
		err = x * theta - y;
		grad = ( x' * err ) / m;	%求gradient
		theta = theta - alpha(alpha_index) * grad;	%梯度下降法更新theta,参考上面的(公式5)
	end
	
	%保存当前alpha的theta结果
	theta_arr(alpha_index,:) = theta';	
	%绘制当前alpha的J值迭代趋势
	if ( alpha_index == 7 )
		legend('0.01', '0.03', '0.1', '0.3', '1', '1.3');
		figure;
		title("J(theta) diverge");
		xlabel('iteration (times)');
		ylabel('J(theta)');
	end
	hold on;
	plot([0:49], J, plot_arg(alpha_index), 'LineWidth', 2);
	
	%a = input("continue : ");
end
legend('1.4');
%===============================================================================

%LB_c:结果输出 ======================================================================
alpha = theta_arr(5);
printf("theta for alpha=1 : \n");
theta_arr(5,:)
test_x = [1, 1650, 3];	%测试数据
test_x(2) = (test_x(2) - mu(2)) / sigma(2);	%scaling
test_x(3) = (test_x(3) - mu(3)) / sigma(3);	%scaling
predict_price = test_x * theta_arr(5,:)';	%计算预测值
printf("predicted price for test data(1650-square-foot house with 3 bedrooms) : \n");
predict_price
%=====================================================================================

(三)执行结果


1. J(θ)收敛的情况,改图对比了当学习率α分别为0.01、0.03、0.1、0.3、1和1.3时J(θ)的收敛趋势,根据对比来选择合适的学习率。本例中,因为α为1时收敛最快而且效果相当,所以选择了α为1。



2. J(θ)发散的情况,当α为1.4时,J(θ)发散的非常厉害,而且实验中发现当α为1.5,1.6甚至更大时发散更加快,J(θ)甚至相差多个数量级,无法在一个图中绘制出来。由此可以看出,α的选取在gradient descent中是非常重要的。



3. 下面是一些输出结果:当α=1时最终求得的回归系数theta,并用该theta值预测题目中给出的测试例子(1650平米,3个卧室),得到的预测房价。得到的结果与题目中给出的solution基本一致。





第二部分,normal equation方法


原题还要求用normal equation实现,并与gradient descent方法进行对比。normal equation的实现很简单,就是前面的文章(【机器学习笔记2】Linear Regression总结)中提到的公式:

(公式7)

实现代码如下:

%=================================================================
% Exercise 3: Multivariate Linear Regression (normal equation)
% author : liubing (liubing80386@163.com)
%

%LB_c: 加载数据 ===============
x = load("ex3x.dat");
y = load("ex3y.dat");
%LB_c: 矩阵x第一列加上全1
x = [ones(size(x)(1),1), x];
%==============================

theta = inv(x'*x)*x'*y;	%normal equation,参考上面的(公式7)
test_x = [1, 1650, 3];	%测试数据
price = test_x * theta;	%计算预测值

printf("theta from normal equation : \n");
theta
printf("predicted price for test data(1650-square-foot house with 3 bedrooms) : \n");
price

执行结果



可以看出,normal equation方法得到的预测值与gradient descent方法得到的是一样(2.9308e+005)。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《机器人学》是由斯坦福大学教授Oussama Khatib主讲的公开课。这门课程涵盖了机器人学的基本概念、机器人运动学、动力学、传感器、路径规划和控制等方面,并介绍了一些目前最先进的机器人技术。 作为机器人学领域的权威,Oussama Khatib在课程中讲解的内容丰富、深入,非常适合对机器人学感兴趣的学生、工程师和研究人员学习。此外,Khatib教授的讲解方式条理清晰,易于理解,而且充满了对机器人技术的热情和热爱。 另外,该课程还提供了详细的讲义,涵盖了课程所涉及的所有内容,并且方便学生进行复习和深入学习。在这些讲义中,Khatib教授详细讲解了机器人学的基本概念和理论,同时提供了大量实际案例和代码。 总之,《机器人学》公开课及其对应的讲义为机器人学习者提供了极为有价值的学习资源,能够帮助学生更好地了解机器人技术,并在实践中运用机器人技术进行创新和研究。 ### 回答2: 斯坦福大学教授Oussama Khatib的《机器人学》公开课是一门涵盖了机器人关键技术和理论的高水平课程。在这门课程中,Khatib教授系统性地介绍了机器人应用及相关技术的前沿动态和研究进展。同时,他也讲述了机器人定位的方法,运动规划以及感知与控制的原理。此外,这门课程也涉及到了软件方面的内容,包括操作系统、通信以及机器人架构的基础等。 同时,Khatib教授也提供了在线公开课讲义,让学习者可以更为深入地理解并掌握相关知识和技术。课件的主要内容包括机器人的基本原理和数学模型,高精度定位及运动规划的技术等。讲义的重点也包括了不同类型的机器人技术,包括工业机器人、服务型机器人以及生物医学机器人等等。此外,讲义也介绍了人机交互和机器人生态系统等话题。 總的來說,Oussama Khatib的《机器人学》公开课及讲义是一门广泛而深入的机器人学课程,能够让学习者更好地理解和掌握机器人技术的前沿与动态,同时也能够更好地将这些知识应用于实际场景中。 ### 回答3: 斯坦福大学教授Oussama Khatib是机器人学领域的大神,他的《机器人学》公开课和对应的讲义已经成为了该领域的经典教材之一。该课程共有16讲,内容涵盖机器人学的各个方面,包括运动学、动力学、力学、感知、规划和控制等。每讲内容都紧密联系实际,通过许多案例和示例来帮助学生理解抽象的机器人学理论。同时,课程深入浅出,讲述逐渐由简单到复杂的知识点,适合初学者和高级学习者研读。 《机器人学》公开课对应的讲义是该课程的重要辅助材料。讲义中有大量的图表、公式和例子,可以帮助学生更好地理解课程内容。该讲义也是Oussama Khatib在教学中积累的经验和研究成果的总结,内容十分丰富,值得机器人学研究者和从业者详细阅读。 总之,斯坦福大学Oussama Khatib教授的《机器人学》公开课和对应的讲义是学习和研究机器人学领域的重要参考资料,它通过深入浅出的方式讲解机器人学理论,帮助学生更好地理解机器人运动规律和控制方法,具有重要的实际意义和研究价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值