机器学习-线性回归

看完前三节课程啦,感觉概念还是分开理还可以,但是所有的拼凑在一起又觉得并不是很明朗,有种中学时代只听课不做练习的感觉。

今天主要是记录一下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');%用绿色描绘

  

posted on 2017-07-17 11:42  北海盗  阅读(187)  评论(0)    收藏  举报