1. 数据预处理:

根据题目,我们得知,该数据为房价关于住房面积,卧室数量的相关数据,共47组数据,我们可以观测到住房面积接近等于卧室数量的1000倍左右,所以我们需要对数据进行标准化。

首先,我们作图如下:

上图为标准化之前的数据,如上图,我们可以看到,住房面积的范围在1000~5000之间。

而房间数量在1~5之间,所以,我们采用以下方式对数据进行标准化。

即假设正态分布,对每一个数据减去对应的均值除以标准差。

我们得到标准化之后的结果。

  1. 我们首先设置学习率为0.05,迭代次数为1000;

初始化theta(一个1x3的行向量)的值为0。优化代码如下:

通过循环迭代,我们发现,当迭代次数达到200时,函数就已经收敛,作图如下:

曲线表示损失函数的值随着迭代次数的变化趋势,完成200次迭代之后,曲线已经收敛。

计算出的theta值如下:

  1. 根据迭代求得的theta值得到房价关于标准化后的数值的函数关系式,做出图像如下:

可以看到,根据theta值得到一个平面如上图所示,z轴代表了房价的高低。

添加训练集数据点:

我们可以看出,训练集数据点均匀的分布在求得的线性切平面的两侧。

  1. 根据线性回归得到的函数,进行预测;

我们将预测值的x转化为一个行向量t = [1,1650,3];进行标准化并绘制

输出预测结果为   2.9308e+05

作图如下:

其中,红色点为预测点,蓝色点为训练集中的点,平面为用于预测的函数切平面。

  1. 通过标准方程(正规方程)求解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 详解+源代码实现相关推荐

  1. Bounding box regression详解

    Bounding box regression详解 转载 http://blog.csdn.net/u011534057/article/details/51235964 Reference link ...

  2. ML Notes: Week 2 - Multivariate Linear Regression

    1. The basic theory of the multivariate linear regression Hypothesis: hθ(x)=θ0x0+θ1x1+-+θnxn=θTXh_\t ...

  3. nn.Linear()函数详解

    nn.Linear()函数详解 torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)[原文地址] ...

  4. Multivariate Linear Regression的参数估计

    多元线性回归的表现形式是(1)hθ(x)=y=θ0+θ1x1+θ2x2+...+θnxnh_\theta(x)=y=\theta_0 + \theta_1x_1 + \theta_2x_2+...+\ ...

  5. Andrew Ng Machine Learning 专题【Logistic Regression amp; Regularization】

    此文是斯坦福大学,机器学习界 superstar - Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记. 力求简洁,仅代表本人观点,不足之处希望大家探 ...

  6. Machine Learning - 逻辑回归(Logistic Regression)

    文章目录 Logistic Distrbution Logistic Regression 模型 损失函数 优化方法 一阶方法 二阶方法 Logistic Regression 的优点及应用 优点 应 ...

  7. Gradient Boosting Machine(GBM)调参方法详解

    原文翻译与校对:@酒酒Angie(drmr_anki@qq.com) && 寒小阳(hanxiaoyang.ml@gmail.com) 时间:2016年9月. 出处:http://bl ...

  8. Python中Gradient Boosting Machine(GBM)调参方法详解

    原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...

  9. 机器学习系列(11)_Python中Gradient Boosting Machine(GBM)调参方法详解

    原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...

最新文章

  1. setAdapter(adapter)空指针nullPointer 解决办法
  2. 成功解决ValueError: Shape of passed values is (1, 332), indices imply (1, 1)
  3. 软件工程概论 课堂练习【图书馆系统的类图】
  4. 如何在Flutter(REST API)中进行API调用
  5. samba安装_Centos安装Samba
  6. linux zabbix使用教程,《Zabbix安装部署》-Centos7
  7. Win7下部署Lepus企业级MySQL数据库监控
  8. 技术一般,却被破格提拔,背后肯定有黑幕?
  9. 从企业角度看:网站设计的关键是了解与沟通
  10. MongoDB University课程M103 Basic Cluster Administration 学习笔记
  11. 超市系统服务器,超市收银系统 服务器 配置
  12. OpenCV总结——高斯核
  13. 计算机辅助翻译和机器翻译的区别,计算机辅助翻译和机器翻译有何区别?
  14. 一个线程OOM,进程里其他线程还能运行么?
  15. 知道一点怎么设直线方程_两点直线方程怎么求
  16. Android根build.gradle中buildscript和allprojects的作用和区别是什么
  17. 2048小游戏编写思路
  18. 对AES 128和256位加密解密性能对比
  19. mysql 多主多从
  20. 【电商支付项目(一)】数据库设计

热门文章

  1. 女性七大瘦身方法速减“孕妇肚”,还你小蛮腰
  2. 小爱同学”商标遭抢注,如何判断商标侵不侵权?
  3. upload-labs靶场-pass-14
  4. 网页视差滚动效果html,CSS视差滚动效果
  5. C#让TextBox滚动条一直位于最下部
  6. 计算机毕业论文Java项目源码下载基于javaweb的汽车租赁网|租车[包运行成功]
  7. 圆周运动、一般曲线运动、阿基米德螺旋线
  8. windows 10下 itunes 备份默认存储路径问题
  9. ​​​资源分享 | 一、盘点高清壁纸网站​​
  10. 爬虫Scrapy框架学习(三)-爬取苏宁图书信息案例