单变量线性回归程序实现
2014-06-27 17:51
344 查看
程序流程
1. 读取数据
[plain]view plaincopyprint?
data = load('ex1data1.txt');
X = data(:, 1); y = data(:, 2);
m = length(y); % number of training examples
2. 画散点图 plotData(X,y)
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
plot(x,y,'rx','MarkerSize',10);
ylabel('Profit in $10,000s');
xlabel('Population of City in 10,000s');
3. 梯度下降法
计算代价函数J computerCost(X,y,theta)
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1) % initialize fitting parameters
[plain]
view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
y1 = X * theta;
J = (y - y1)'*(y - y1)/(2*m);
确定迭代次数
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
iterations = 1500;
alpha = 0.01;
迭代θ0和θ1
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
for iter = 1:num_iters
temp1 = theta(1) - alpha * sum(X*theta-y)/m;
temp2 = theta(2) - alpha * (X*theta-y)'*X(:,2)/m;
theta = [temp1; temp2];
J_history(iter) = computeCost(X, y, theta);
end
4. 画出由θ确定的直线、输出预测数据
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
plot(X(:,2), X*theta, '-')
legend('Training data', 'Linear regression')
% Predict values for population sizes of 35,000 and 70,000
predict1 = [1, 3.5] *theta;
fprintf('For population = 35,000, we predict a profit of %f\n',...
predict1*10000);
predict2 = [1, 7] * theta;
fprintf('For population = 70,000, we predict a profit of %f\n',...
predict2*10000);
5. 可视化代价函数J
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
% Grid over which we will calculate J
theta0_vals = linspace(-10, 10, 100);
theta1_vals = linspace(-1, 4, 100);
% initialize J_vals to a matrix of 0's
J_vals = zeros(length(theta0_vals), length(theta1_vals));
% Fill out J_vals
for i = 1:length(theta0_vals)
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');
6. J的等值线图
[plain]view plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20))
xlabel('\theta_0'); ylabel('\theta_1');
hold on;
plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2);
相关文章推荐
- 多变量线性回归程序实现
- 机器学习入门学习笔记:(2.2)线性回归python程序实现
- 设置环境变量实现使用“运行“快速打开QQ等程序
- 用matlab实现多元线性回归
- 局部加权线性回归及岭回归之Python实现
- 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程)
- 线性回归的java实现
- PHP实现简单线性回归之数据研究工具(1)
- Linux下搭建Java环境变量并实现第一个Java小程序
- 线性回归梯度下降matlab实现
- 学习日志---线性回归实现
- perl实现设置环境变量并运行程序
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- Stanford机器学习---第二讲. 多变量线性回归Linear Regression with multiple variables
- 加权最小二乘回归方法的程序实现范例
- 【SAS NOTES】proc reg 单变量线性回归
- 使用VBScript实现设置系统环境变量的小程序
- Coursera2014 机器学习第一周 单变量线性回归
- n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥的程序描述,给出信号灯值得取值范围,并说明每个取值范围的物理意义。
- 机器学习门户网站——单变量线性回归