线性回归模型是最简单的监督式学习模型:
所谓的监督式学习模型就是需要通过已有的数据训练出一个最优的模型,能够表示这些已有的模型并能够预测新的数据。怎么判断模型是不是最优的呢?这就需要引入代价函数(Cost Function):
怎么得到最优的模型呢?这就需要求解代价函数的最小值,也就需要引入梯度下降法。梯度下降法就是通过迭代,每一次都比之前已次更加接近代价函数的最小值,最后在误差允许的范围内终止迭代。
我们求出了参数,带入
便得到了最简单的线性回归模型
参考练习:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex2/ex2.html
function Linear_Regression()
clear all; close all;clc
x=load('ex2x.dat')
y=load('ex2y.dat')
m=length(y);
%plot the training data
figure;
plot(x,y,'o');
ylabel('Height in meters');
xlabel('Age in years')
%gradient descent
x=[ones(m,1) x];
theta = zeros(size(x(1,:)))';
MAX_ITER = 1500;
alpha=0.07;
for iter=1:MAX_ITER
grad = (1/m).*x'*((x*theta)-y);
theta = theta - alpha .*grad;
end
theta
hold on;
plot(x(:,2),x*theta,'-')
legend('Training data','Linear regression')
hold off
predict1=[1,3.5]*theta
predict2=[1,7]*theta
theta0_vals=linspace(-3,3,100);
theta1_vals=linspace(-1,1,100);
J_vals =zeros(length(theta0_vals),length(theta1_vals));
for i=1:length(theta0_vals)
for j=1:length(theta1_vals)
t=[theta0_vals(i);theta1_vals(j)];
J_vals(i,j) = (0.5/m).*(x*t-y)'*(x*t-y);
end
end
J_vals= J_vals';
figure;
surf(theta0_vals,theta1_vals,J_vals)
xlabel('\theta_0'); ylabel('\theta_1');
figure
contour(theta0_vals,theta1_vals,J_vals,logspace(-2,2,15))
xlabel('\theta_0'); ylabel('\theta_1');
end
Cantor图
参考资料http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning