1. 原理
线性回归其实就是寻找一条直线拟合数据点,使得损失函数最小。
2.实现
本次实验采用matlab作为工具,代码及解析如下:
x=load('Gx.dat');%取出年份,形成一个14×1的矩阵
x=(x-1999)/14;%年份做预处理,讲年份的数值和房价统一在同一个数量级
length=size(x,1);% length为x的维度,此处length=14
x1=[x,ones(14,1)];%x1是对x的处理,形成了14×2的矩阵,第二列都为1,因为在hypothesis中h=theta1×1+theta2×xi的。
y1=load('Gy.dat');%取出房价,形成一个14×1的矩阵
alpha=0.1;%学习率,即步长
theta=[0;0];%定义了一个2×1的矩阵,theta(1)为theta1,theta(2)为theta2。
maxgen=40;%定义了迭代次数
axis([2000,2014,0,16]);%固定坐标轴
fori = 1:maxgen
scatter(x*14+1999,y1);%描点
holdon;
a =linspace(2000,2016,16);
e=x1*theta-y1;%error,x1是一个14×2的矩阵,theta是一个2×1的矩阵,x1*theta得到矩阵14×1矩阵,减去y1等到e即为每维上的error。
theta=theta-alpha*(e'*x1)';%更新theta,主要是对矩阵的操作
cost=sum(e'*e)/2;%算出损失函数J
b = theta(2) +theta(1) * (a-1999)/14;
disp(cost);
plot(a,b);%画直线
pause(0.5);%暂停0.5秒,方便效果展示
if(i
plot(a,b,'w');%设置刚画线的为白色,隐藏直线
end
end
disp('2015年的房价估计在');
disp(theta(2) + theta(1) * (2015-1999)/14);%输出预测房价
注:红色标记代码为关键代码
领取专属 10元无门槛券
私享最新 技术干货