Andrew Ng机器学习编程作业: Linear Regression
编程作业有两个文件
1.machine-learning-live-scripts(此为脚本文件方便作业)
2.machine-learning-ex1(此为作业文件)
将这两个文件解压拖入matlab工作区内并将machine-learning-live-scripts内的ex1.mlx拖入到machine-learning-ex1\ex1中

在命令提示符区输入subimit命令,并填写邮箱与提交凭证来提交作业。
1.A simple MATLAB function
修改warmUpExercise.m文件,生成5*5的单位矩阵并赋给A
A = eye(5);
2.Linear regression with one variable(单变量线性回归)
2.1 Plotting the data
通过每个城市的人口与利润数据求人口与利润的关系。
ex1data1.txt文件内包含了数据集
加载数据并将人口数据赋给X利润数据给y
data = load('ex1data1.txt'); % read comma separated data
X = data(:, 1); y = data(:, 2);
修改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
执行plotData(X,y)将会出面下面图

2.2 Gradient Descent
价值函数:

假设函数:

调整参数的公式是:

每迭代一次J的值就会减少一次。所预测的模型与实际就越符合。
初始化各个变量:
m = length(X) % number of training examples
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1); % initialize fitting parameters
iterations = 1500;
alpha = 0.01;
修改computeCost.m文件。填写代码,计算价值函数:
J = (1/(2*m))*sum((X*theta-y).^2);
保存执行
computeCost(X, y, theta)
如果得到的值为32.07则表示计算正确。
修改gradientDescent.m文件,填写代码,用梯度下降算法计算theta值
temp = zeros(size(X,2),1);
for j = 1:size(X,2)
temp(j,1) = theta(j,1)-alpha*(1/m)*sum((X*theta-y).*X(:,j));
end
theta = temp;
文件中已经写好循环结构。记住一次迭代中,计算theta值需要用用当前的theta值,视频中已经说明

绘制回归直线与训练集的线
% Run gradient descent:
% Compute theta
theta = gradientDescent(X, y, theta, alpha, iterations); % Print theta to screen
% Display gradient descent's result
fprintf('Theta computed from gradient descent:\n%f,\n%f',theta(1),theta(2)) % Plot the linear fit
hold on; % keep previous plot visible
plot(X(:,2), X*theta, '-')
legend('Training data', 'Linear regression')
hold off % don't overlay any more plots on this figure
绘制结果:

theta可视化:
价值函数的3d视图

价值函数的等高线

3. Linear regression with multiple variables(多变量线性回归)
多变量与单变量的价值函数相同。梯度计算也类似,只是多变量线性回归每次迭代计算的theta的数量多。
拥有房子大小和卧室数量两个特征,与房子价格。求房子价格与这两个特征的关系。
导入数据
% Load Data
data = load('ex1data2.txt');
X = data(:, 1:2);
y = data(:, 3);
m = length(y); % Print out some data points
% First 10 examples from the dataset
fprintf(' x = [%.0f %.0f], y = %.0f \n', [X(1:10,:) y(1:10,:)]');
因为房子大小与卧室数量两个值差距很大,如果直接使用梯度下降,那么收敛速度就会很慢。所以需要先进行特征缩放。
特征缩放公式:

u为对对应特征平均值,s为标准差(视频中为max-min)。
修改featureNormalize.m文件,填写代码。得到正确的平均值与标准差。可以使用mean函数计算平均值,std函数计算标准差。
mu = mean(X);
sigma = std(X);
X_norm=(X-mu)./sigma;
给X添加一列1
X = [ones(m, 1) X];
在computeCostMulti.m中填写价值函数
J = (1/(2*m))*sum((X*theta-y).^2);
价值函数也可以用下面公式表示,计算结果一样

梯度下降计算theta的值将代码填入gradientDescentMulti.m文件中
temp = zeros(size(X,2),1);
for j = 1:size(X,2)
temp(j,1) = theta(j,1)-alpha*(1/m)*sum((X*theta-y).*X(:,j));
end
theta = temp;
计算theta的值还可是使用正规方程法。视频中有讲解

theta = pinv(X'*X)*X'*y;
预测价格:
price = [[1 ([1650 3]-mu)./sigma]*theta]
需注意,因为进行了特征缩放,所以也应该的需要预测的房子的特征进行缩放。
价格为

学习速度alpha,应该选择合适的大小。 过大可能导致价值函数不减反增。过小则会收敛太慢。
Andrew Ng机器学习编程作业: Linear Regression的更多相关文章
- Andrew Ng机器学习编程作业:Logistic Regression
编程作业文件: machine-learning-ex2 1. Logistic Regression (逻辑回归) 有之前学生的数据,建立逻辑回归模型预测,根据两次考试结果预测一个学生是否有资格被大 ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 4—反向传播神经网络
课程笔记 Coursera—Andrew Ng机器学习—课程笔记 Lecture 9_Neural Networks learning 作业说明 Exercise 4,Week 5,实现反向传播 ba ...
- Andrew NG 机器学习编程作业5 Octave
问题描述:根据水库中蓄水标线(water level) 使用正则化的线性回归模型预 水流量(water flowing out of dam),然后 debug 学习算法 以及 讨论偏差和方差对 该线 ...
- Andrew NG 机器学习编程作业2 Octave
问题描述:用逻辑回归根据学生的考试成绩来判断该学生是否可以入学 这里的训练数据(training instance)是学生的两次考试成绩,以及TA是否能够入学的决定(y=0表示成绩不合格,不予录取:y ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 1 线性回归
作业说明 Exercise 1,Week 2,使用Octave实现线性回归模型.数据集 ex1data1.txt ,ex1data2.txt 单变量线性回归必须实现,实现代价函数计算Computin ...
- Andrew Ng机器学习 一: Linear Regression
一:单变量线性回归(Linear regression with one variable) 背景:在某城市开办饭馆,我们有这样的数据集ex1data1.txt,第一列代表某个城市的人口,第二列代表在 ...
- Andrew Ng机器学习编程作业:Regularized Linear Regression and Bias/Variance
作业文件: machine-learning-ex5 1. 正则化线性回归 在本次练习的前半部分,我们将会正则化的线性回归模型来利用水库中水位的变化预测流出大坝的水量,后半部分我们对调试的学习算法进行 ...
- Andrew NG 机器学习编程作业3 Octave
问题描述:使用逻辑回归(logistic regression)和神经网络(neural networks)识别手写的阿拉伯数字(0-9) 一.逻辑回归实现: 数据加载到octave中,如下图所示: ...
- Andrew NG 机器学习编程作业4 Octave
问题描述:利用BP神经网络对识别阿拉伯数字(0-9) 训练数据集(training set)如下:一共有5000个训练实例(training instance),每个训练实例是一个400维特征的列向量 ...
随机推荐
- 牛散NO.1:MACD计啜诱多,勾魂枪连环夺命时
上证日线“连环夺命勾魂枪” 话说MACD中圈C的回勾,好事者皆认为新的冲击波即将曙光再现.伴随着K线出现红柱中阳,更多的投资者将会被这一勾诱惑得群情亢奋,盲断行情又要 起来了.但往往事与愿违,“潘金莲 ...
- 固态继电器SSR
s107. LH1521. CPC1035N http://e22a.com/h.bXsDYw?cv=AAOzhSfJ&sm=53e30b
- numpy, pandas, scikit-learn cheat sheet (速查表)
1. scikit-learn cheat sheet 官方链接如下:http://scikit-learn.org/stable/tutorial/machine_learning_map/ Oft ...
- Windows内存管理的方式
一.内存的概念 1. 物理内存:即插在主板上的内存条.他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外). 但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存占用,甚至导 ...
- js - 模块化开发的兼容exports的套路
补充:除了第一种的套路,还可以这样使用第二种.都是用来自执行函数的.第二种的好处是,还可以返回一个true. // 常用 ;(function () {})(); // 小技巧(如果不加上!会报错,加 ...
- MII_GMII_RGMII_RMII_SMII_SSMII_TBI_RTBI
简介 MII是英文Medium Independent Interface的缩写,翻译成中文是“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有 ...
- MVC-Model
用模型取代字典理由: **使用字典的坏处 一般情况下,存入数据和取出数据都使用“字典类型的key”,编写这些key时,编译时不会有任何的友善提示,需要手敲,容易出错. dict[@“name”] = ...
- Windows Server 2008 R2入门之用户管理
一.用户账户概述: ”用户”是计算机的使用者在计算机系统中的身份映射,不同的用户身份拥有不同的权限,每个用户包含一个名称和一个密码: 在Windows中,每个用户帐户有一个唯一的安全标识符(Secur ...
- js 简单的样式封装
<script> function test(value){ var str=value; document.write("<div style=\"width: ...
- 【OC学习-13】什么是组合,它和继承是什么关系?
继承有两缺点:(1)当层级越来越多时,假如每一个层级都有实例变量,那么最下层的子类继承的实例变量会超级多,沉重.(2)当消息传递自子类往上时.层级越多,效率越低下. 所以就有了组合.说实话区分继承和组 ...