看完前三节课程啦,感觉概念还是分开理还可以,但是所有的拼凑在一起又觉得并不是很明朗,有种中学时代只听课不做练习的感觉。
今天主要是记录一下malab的理解代码。
回归问题,依旧是用房屋问题作为典型的代表,理论部分就不再这里记录了,因为手写版的理解笔记有了就好了。下面就是简要概述下流程:
training set (x,y) 下载
prediction=theta*x
目标是调整theta,使得对于每一个x对应的prediction尽可能的接近对应的y.
sqrError=(prediction-y).^2;
[m,n]=size(x);
cost: J=1/(2*m)*sum(sqrError)
ok,思路都清楚了,下面就是matlab的实现。
%损失函数的定义。存放在项目目录下,命名为costFunctionJ。m function J=costFunctionJ(x,y,theta) [m,n]=size(x); prediction=x*theta; sqrError=(prediction-y).^2; J=1/(2*m)*sum(sqrError); %功能:对于任意的theta,给出损失的大小,也就是误差大小。 %数据集下载好并且重命名为house.txt,存放在项目目录下。 %载入数据集 house=load('house.txt'); X=(:,1,2);%所有行,1,2,列(都是我自己的理解,没学过matlab) Y=(:,3); hold on %显示一个2维坐标轴。有不覆盖原图的功能 %标上X,Y轴 xlabel X ylabel Y %将(X,Y)显示在坐标中 plot(X(:,2),Y(:,1),'*'); %theta是自己随便取的, theta=[3.575;1.62]; j=costFunctionJ(X,Y,theta) %就会自动给出误差啦
%之后就把你这个prediction表示在坐标上
x=(0:1);
y=theta(1,:)+theta(2,:)*x;
plot(x,y,'r');%用红色描绘
----------------
下面是用标准方程的方法,参考【http://blog.csdn.net/google19890102/article/details/26074827】
%标准方程解回归问题 %standRegres.m function [theta] = standRegres(x,y) [m,n] = size(x); xTx=x'*x; if det(xTx) == 0 disp('This matrix is singular,can not do inverse'); end theta =pinv(xTx)*x'*y; end
%下面是对函数的调用:
house=load('house.txt'); X=(:,1,2);%所有行,1,2,列(都是我自己的理解,没学过matlab) Y=(:,3); hold on %显示一个2维坐标轴。有不覆盖原图的功能 %标上X,Y轴 xlabel X ylabel Y %将(X,Y)显示在坐标中 plot(X(:,2),Y(:,1),'*');
theta = standRegres(X,Y);
x=(0:1);
y=theta(1,:)+theta(2,:)*x;
plot(x,y,'g');%用绿色描绘