Machine Learning experiment2 Multivariate Linear Regression 详解+源代码实现
- 数据预处理:
根据题目,我们得知,该数据为房价关于住房面积,卧室数量的相关数据,共47组数据,我们可以观测到住房面积接近等于卧室数量的1000倍左右,所以我们需要对数据进行标准化。
首先,我们作图如下:
上图为标准化之前的数据,如上图,我们可以看到,住房面积的范围在1000~5000之间。
而房间数量在1~5之间,所以,我们采用以下方式对数据进行标准化。
即假设正态分布,对每一个数据减去对应的均值除以标准差。
我们得到标准化之后的结果。
- 我们首先设置学习率为0.05,迭代次数为1000;
初始化theta(一个1x3的行向量)的值为0。优化代码如下:
通过循环迭代,我们发现,当迭代次数达到200时,函数就已经收敛,作图如下:
曲线表示损失函数的值随着迭代次数的变化趋势,完成200次迭代之后,曲线已经收敛。
计算出的theta值如下:
- 根据迭代求得的theta值得到房价关于标准化后的数值的函数关系式,做出图像如下:
可以看到,根据theta值得到一个平面如上图所示,z轴代表了房价的高低。
添加训练集数据点:
我们可以看出,训练集数据点均匀的分布在求得的线性切平面的两侧。
- 根据线性回归得到的函数,进行预测;
我们将预测值的x转化为一个行向量t = [1,1650,3];进行标准化并绘制
输出预测结果为 2.9308e+05
作图如下:
其中,红色点为预测点,蓝色点为训练集中的点,平面为用于预测的函数切平面。
- 通过标准方程(正规方程)求解theta值。
计算方法如下:
运行代码如下,求出对应的theta值,θ= 。
我们可以看到,此处的theta值和之前计算得到的theta值并不相同。是因为之前计算的theta值时基于标准化之后的数据计算出的参数,而通过正规方程求得的theta值是直接针对训练集真实数据的参数,所以,预测时不需要再对需要预测的数据进行标准化,直接带入含theta的方程即可。
求得结果如下:
Y= 2.9308e+05.
这里我们可以发现,预测得到的y值是相同的。
绘制图像如下:
MATLAB源代码:
(去除行号方法参见:https://blog.csdn.net/IT_flying625/article/details/105317320)
1. 梯度下降法:
1. x=load('ex2x.dat');
2. y=load('ex2y.dat');
3. plot3(x(:,1),x(:,2) ,y,'o');
4. title('Data Before Normalization')
5. xlabel ('Living Area' ) ; ylabel ('Number Of Bedrooms');
6. zlabel('The price of houses');
7. grid on
8. m=length(x)
9. x=[ones(m,1),x];
10. %标准化
11. sigma=std(x); %标准差
12. mu=mean(x); %求平均值
13. x (:,2)=(x(:,2)-mu(2))./sigma(2); %减均值除以标准差
14. x (:,3)=(x(:,3)-mu(3))./sigma(3);
15. figure
16. plot3(x(:,2) , x(:,3) ,y, ' o ' ) ;
17. title('Data After Normalization')
18. xlabel ('Living Area' ) ; ylabel ('Number Of Bedrooms');
19. zlabel('The price of houses');
20. grid on
21. learning_rate=0.05
22. iteration=1000
23. theta=[0,0,0]
24. for step=1:iteration
25. temp=x*theta'-y;
26. sqrerrors=temp.^2;
27. theta=theta-learning_rate*(1/m)*(temp'*x);
28. Jcost(step) = (1/2*m)*sum(sqrerrors);
29. %disp(step),disp(Jcost(step))
30. end
31. figure;
32. plot(Jcost)
33. title('The relation between J and iteration ');
34. ylabel ( 'J cost' )
35. xlabel ( 'iteration' )
36. legend('\alpha = 0.05')
37. disp(theta)
38. figure
39. x1=linspace(-4,4,100);
40. x2=linspace(-4,4,100);
41. [X1,X2]=meshgrid(x1,x2);
42. Z=theta(1)+theta(2)*X1+theta(3)*X2;
43. p=mesh(X1,X2,Z)
44. hold on
45. disp(x(2))
46. disp(x(3))
47. p1=plot3(x(:,2),x(:,3),y,'o','Color','b')
48. hold on
49. t = [1,1650,3];
50. t (:,2)=(t(:,2)-mu(2))./sigma(2); %减均值除以标准差
51. t (:,3)=(t(:,3)-mu(3))./sigma(3);
52. p2=plot3(t(2),t(3),t* theta','x','Color','r')
53. disp(t*theta')
54. xlabel ('Living Area' ) ;
55. ylabel ('Number Of Bedrooms');
56. zlabel('The price of houses');
57. title('Training Result')
58. legend([p,p1,p2],{'linear regression','data','prediction'})
2. 正规方程法:
1. x=load('ex2x.dat');
2. y=load('ex2y.dat');
3. m=length(x)
4. x=[ones(m,1),x];
5. theta = inv(x'*x)*x'*y
6. figure
7. plot (x(:,2),y,'o');
8. %plot3(x(:,2), x*theta, '-g','Linewidth',2);
9. p1=plot3(x(:,2),x(:,3),y,'o','Color','b')
10. hold on
11. x2=linspace(1,5,100);
12. x1=linspace(500,4500,100);
13. [X1,X2]=meshgrid(x1,x2);
14. Z=theta(1)+theta(2)*X1+theta(3)*X2;
15. p=mesh(X1,X2,Z)
16. t = [1,1650,3];
17. p2=plot3(t(2),t(3),t*theta,'x','Color','r')
18. disp(t*theta)
19. xlabel ('Living Area' ) ;
20. ylabel ('Number Of Bedrooms');
21. zlabel('The price of the houses');
22. title('Result')
23. grid on
Machine Learning experiment2 Multivariate Linear Regression 详解+源代码实现相关推荐
- Bounding box regression详解
Bounding box regression详解 转载 http://blog.csdn.net/u011534057/article/details/51235964 Reference link ...
- ML Notes: Week 2 - Multivariate Linear Regression
1. The basic theory of the multivariate linear regression Hypothesis: hθ(x)=θ0x0+θ1x1+-+θnxn=θTXh_\t ...
- nn.Linear()函数详解
nn.Linear()函数详解 torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)[原文地址] ...
- Multivariate Linear Regression的参数估计
多元线性回归的表现形式是(1)hθ(x)=y=θ0+θ1x1+θ2x2+...+θnxnh_\theta(x)=y=\theta_0 + \theta_1x_1 + \theta_2x_2+...+\ ...
- Andrew Ng Machine Learning 专题【Logistic Regression amp; Regularization】
此文是斯坦福大学,机器学习界 superstar - Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记. 力求简洁,仅代表本人观点,不足之处希望大家探 ...
- Machine Learning - 逻辑回归(Logistic Regression)
文章目录 Logistic Distrbution Logistic Regression 模型 损失函数 优化方法 一阶方法 二阶方法 Logistic Regression 的优点及应用 优点 应 ...
- Gradient Boosting Machine(GBM)调参方法详解
原文翻译与校对:@酒酒Angie(drmr_anki@qq.com) && 寒小阳(hanxiaoyang.ml@gmail.com) 时间:2016年9月. 出处:http://bl ...
- Python中Gradient Boosting Machine(GBM)调参方法详解
原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...
- 机器学习系列(11)_Python中Gradient Boosting Machine(GBM)调参方法详解
原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...
最新文章
- setAdapter(adapter)空指针nullPointer 解决办法
- 成功解决ValueError: Shape of passed values is (1, 332), indices imply (1, 1)
- 软件工程概论 课堂练习【图书馆系统的类图】
- 如何在Flutter(REST API)中进行API调用
- samba安装_Centos安装Samba
- linux zabbix使用教程,《Zabbix安装部署》-Centos7
- Win7下部署Lepus企业级MySQL数据库监控
- 技术一般,却被破格提拔,背后肯定有黑幕?
- 从企业角度看:网站设计的关键是了解与沟通
- MongoDB University课程M103 Basic Cluster Administration 学习笔记
- 超市系统服务器,超市收银系统 服务器 配置
- OpenCV总结——高斯核
- 计算机辅助翻译和机器翻译的区别,计算机辅助翻译和机器翻译有何区别?
- 一个线程OOM,进程里其他线程还能运行么?
- 知道一点怎么设直线方程_两点直线方程怎么求
- Android根build.gradle中buildscript和allprojects的作用和区别是什么
- 2048小游戏编写思路
- 对AES 128和256位加密解密性能对比
- mysql 多主多从
- 【电商支付项目(一)】数据库设计
热门文章
- 女性七大瘦身方法速减“孕妇肚”,还你小蛮腰
- 小爱同学”商标遭抢注,如何判断商标侵不侵权?
- upload-labs靶场-pass-14
- 网页视差滚动效果html,CSS视差滚动效果
- C#让TextBox滚动条一直位于最下部
- 计算机毕业论文Java项目源码下载基于javaweb的汽车租赁网|租车[包运行成功]
- 圆周运动、一般曲线运动、阿基米德螺旋线
- windows 10下 itunes 备份默认存储路径问题
- ​​​资源分享 | 一、盘点高清壁纸网站​​
- 爬虫Scrapy框架学习(三)-爬取苏宁图书信息案例