最近开始看斯坦福的公开课《Machine Learning》,对其中单参数的Linear Regression(未涉及Gradient Descent)做个总结吧。
【设想】
最近想要租房,收集了一些信息,得知房价与房间大小有关,那成本函数就可以预测在不同房间大小下租房的价格(PS:价格可能也与该房地理有关,那若把大小和距离市中心距离一并考虑,则属于多参数的线性回归)
【数据】
1、准备一个ex1data1.txt,第一列为年龄,第二列为价格
2、导入matlab
data = load('ex1data1.txt');
3、赋值给不同的变量
X = data(:,1); %第一列年龄作为X
y = data(:,2); %第二列价格作为y
4、查看导入的数据
plot(X, y,'rx','MarkerSize',10);
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9MeW8vQXBwRGF0YS9Mb2NhbC9UZW1wL1dpei82MDNlZGVkOC02NGQ3LTQxYTQtOWRlMi0wMTIzZGZhMTY2ZjZfMF9maWxlcy84MTkzNTYyLnBuZw%3D%3D.png?w=700)
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9MeW8vQXBwRGF0YS9Mb2NhbC9UZW1wL1dpei82MDNlZGVkOC02NGQ3LTQxYTQtOWRlMi0wMTIzZGZhMTY2ZjZfMF9maWxlcy84MTkzNTYyLnBuZw%3D%3D.png?w=700)
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjI1OTI0NzAzP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
我们需要找到一条y=a+bx的直线(a=theta0,b=theta1),最大程度的拟合上图中的点,那如何取得a与b的值,则运用了成本函数,如下:
【公式】
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjI1OTU3NzY1P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
【MatLab】
data = load('ex1data1.txt');
y = data(:,2); %选取价格作为y变量
m = length(y);
X = [ones(m, 1), data(:,1)]; %选取房间大小作为第二列,第一列为1
theta0_vals = linspace(-3,3,100); %确定theta0轴的范围为[-3,3],100个刻度
theta1_vals = linspace(-1,1,100);
for i=1:length(theta0_vals) %循环执行computeCost函数,找到min(J_vals)的theta0和theta1值
for j=1:length(theta1_vals)
t = [theta0_vals(i); theta1_vals(j)];
J_vals(i,j) = computeCost(X, y, t);
end
end
% Because of the way meshgrids work in the surf command, we need to
% transpose J_vals before calling surf, or else the axes will be flipped
J_vals = J_vals';
% Surface plot
figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');
% eg:X(i,:)= [1,6]
% eg:t= ![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjMwMDI0NDg0P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjMwMDI0NDg0P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
function J = computeCost(X, y, theta)
m = length(y); % 训练集个数
J = 0;
h=0;
for i= 1:m
h = h + (theta' * X(i,:)'-y(i))^2; %实现J(theta)公式的后半部
end
J = 1/(2*m)*h
end
eg:
,这就是为什么X变量要特地赋成两列,为了实现a+bx的矩阵效果
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjMwMDQwNjcxP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
【可视化结果】
![【Machine Learning】单参数线性回归 Linear Regression with one variable 【Machine Learning】单参数线性回归 Linear Regression with one variable](https://image.shishitao.com:8440/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTMwNzE3MjMwMDU0MDQ2P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmJIbHZlbWh2ZFE9PS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA%3D%3D.jpg?w=700)
参考:
斯坦福机器学习的课后习题及程序:
下载
下载