机器学习-线性回归
看完前三节课程啦,感觉概念还是分开理还可以,但是所有的拼凑在一起又觉得并不是很明朗,有种中学时代只听课不做练习的感觉。
今天主要是记录一下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');%用绿色描绘
浙公网安备 33010602011771号