编程练习(一):线性回归
文件清单
- ex1.m
- ex1_multi.m
- ex1data1.txt - ex1.m 用到的数据组
- ex1data2.txt - ex1_multi.m 用到的数据组
- submit.m - 提交代码
- [*] warmUpExercise.m
- [*] plotData.m
- [*] computeCost.m
- [*] gradientDescent.m
- [+] computeCostMulti.m
- [+] gradientDescentMulti.m
- [+] featureNormalize.m
- [+] normalEqn.m
* 为必须要完成的
+ 为可选
1 简单的Octave/MATLAB函数
完成 warmUpExercise.m ,使得 A 为 5x5 单位矩阵,送分的。
A = eye(5);
输出结果:
ans =
Diagonal Matrix
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
1.1 提交代码
使用 submit
解决不能上传的问题:
Windows
进入练习的 /lib
文件夹中,编辑 submitWithConfiguration.m 修改第66行,然后重启octave
responseBody = urlread(submissionUrl, 'post', params);
% 改为
[code, responseBody] = system(sprintf('echo jsonBody=%s | curl -k -X POST -d @- %s', body, submissionUrl));
OSX Linux
进入练习的 /lib
文件夹中,编辑 submitWithConfiguration.m 修改第66行,然后重启octave
responseBody = urlread(submissionUrl, 'post', params);
% 改为
[code, responseBody] = system(sprintf('echo ''jsonBody=%s'' | curl -k -X POST -d @- %s', body, submissionUrl));
2 单变量线性回归
背景:假设我们现在是个连锁餐厅的老板,已经在很多城市开了连锁店(提供训练组),现在想再开新店,需要通过以前的数据预测新开的店的收益。
ex1data1.txt 提供所需要的训练组,第一列是城市人口,第二列是对应的收益。负值代表着亏损。
ex1.m 已经加载了数据。
2.1 可视化数据
ex1.m 中加载了变量 X 和 y:
data = load('ex1data1.txt'); % read comma separated data
X = data(:, 1); y = data(:, 2);
m = length(y); % number of training examples
接着 plotData 函数将其绘制出来,我们需要完成 plotData.m 进行绘图:
plot(x, y, 'rx', 'MarkerSize', 10); % Plot the data
ylabel('Profit in $10,000s'); % Set the y-axis label
xlabel('Population of City in 10,000s'); % Set the x-axis label
现在运行 ex1.m 就能看到类似图1的图像了:
* 通过看手册学习函数是个很好的方式 help plot
。
2.2 梯度下降
在这一结中我们要通过梯度下降计算出合适的线性回归参数theta。
2.2.1 更新等式
线性回归的目标是将成本函数最小化:
J(θ)=12m∑i<