一.准备工作

  1. 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确。如:
  2. 提交作业:提交时候需要使用自己的登录邮箱和提交令牌,如下:

二.单变量线性回归

绘制图形:rx代表图形中标记的点为红色的x,数字10表示标记的大小。

plot(x, y, 'rx', 'MarkerSize', ); % Plot the data

计算代价函数(Cost Funtion):迭代次数1500,学习速率0.01.   iterations = 1500;  alpha = 0.01;

注意需给原始数据X添加一列值为1的属性:X = [ones(m, 1), data(:,1)];  theta = zeros(2, 1);

function J = computeCost(X, y, theta)  %文件名为computeCost.m
m = length(y); % number of training examples
J = /(*m)*sum((X*theta-y).^);
end

梯度下降(Gradient Descent ):

function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)  %文件名为gradientDescent.m
m = length(y); % number of training examples
J_history = zeros(num_iters, );
for iter = :num_iters
temp=X'*(X*theta-y);
theta=theta-/m*alpha*temp;
J_history(iter) = computeCost(X, y, theta);
end
end

然后绘制出我们使用经过梯度下降求出的最优参数θ值所做预测的图形,如下:

可视化J(θ):

使用表面图进行可视化:

theta0_vals = linspace(-, , );  %生成范围在[-10,10]之间100个点的线性行矢量,即维数为1*100的矩阵
theta1_vals = linspace(-, , );  %生成范围在[-1,4]之间100个点的线性行矢量,即维数为1*100的矩阵 J_vals = zeros(length(theta0_vals), length(theta1_vals));  %对应的代价函数值,维数为100*100
% Fill out J_vals
for i = :length(theta0_vals)    %计算代价函数值
for j = :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函数的特性,必须进行转置。其实就是因为θ0和θ1要和行列坐标x,y对齐。
% Surface plot
figure;
surf(theta0_vals, theta1_vals, J_vals)  %绘制表面图
xlabel('\theta_0'); ylabel('\theta_1');

结果如下:从图中可看出代价函数值J(θ)有全局最优解(最低点)。

使用等高线图进行可视化:(logspace函数和linspace函数类似,此处作用生成将区间[10-2,103]等分20份的1*20矩阵)

figure;  %这里的J_vals在前面进行了转置,所以此处不用转置!
contour(theta0_vals, theta1_vals, J_vals, logspace(-, , ))  
xlabel('\theta_0'); ylabel('\theta_1');  %用到了转义字符'\theta_0'和'\theta_1'.
hold on;
plot(theta(), theta(), 'rx', 'MarkerSize', , 'LineWidth', );

结果如下:可以看出我们求出的最优参数θ所对应的代价值,正好位于等高线图最低的位置!

三.多变量线性回归(选做)

特征规则化:

function [X_norm, mu, sigma] = featureNormalize(X)  %文件名为featureNormalize.m
X_norm = X;
mu = zeros(, size(X, ));  %记录每个特征xi的平均值
sigma = zeros(, size(X, ));  %记录每个特征xi的标准差值 for i=:size(X,),
mu(i)=mean(X(:,i));    %使用公式mean求平均值
sigma(i)=std(X(:,i));   %使用公式std求标准差值
X_norm(:,i)=(X_norm(:,i)-mu(i))/sigma(i);
end
end

代价函数和梯度下降:和单变量相同(省略)

不同学习速率下,随着迭代次数的增加,代价函数值逐渐收敛图形:可以发现学习速率为0.01最为合适!

房价预测:Estimate the price of a 1650 sq-ft, 3 br house

% Estimate the price of a  sq-ft,  br house
% ====================== YOUR CODE HERE ======================
% Recall that the first column of X is all-ones. Thus, it does
% not need to be normalized.
x_try=[ ];
x_try()=x_try()-mu();
x_try()=x_try()-mu();
x_try()=x_try()/sigma();
x_try()=x_try()/sigma();
price = [ones(, ) x_try]*theta; % 这里的theta是我们前面经过梯度下降求出的

 正规方程求参数theta:

function [theta] = normalEqn(X, y)
theta = zeros(size(X, ), );
theta=pinv(X'*X)*X'*y;
end

无~

Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业的更多相关文章

  1. Coursera-AndrewNg(吴恩达)机器学习笔记——第二周编程作业(线性回归)

    一.准备工作 从网站上将编程作业要求下载解压后,在Octave中使用cd命令将搜索目录移动到编程作业所在目录,然后使用ls命令检查是否移动正确.如: 提交作业:提交时候需要使用自己的登录邮箱和提交令牌 ...

  2. Coursera-AndrewNg(吴恩达)机器学习笔记——第二周

    一.多变量线性回归问题(linear regression with multiple variables) 搭建环境OctaveWindows的安装包可由此链接获取:https://ftp.gnu. ...

  3. Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)

    多分类问题——识别手写体数字0-9 一.逻辑回归解决多分类问题 1.图片像素为20*20,X的属性数目为400,输出层神经元个数为10,分别代表1-10(把0映射为10). 通过以下代码先形式化展示数 ...

  4. Coursera-AndrewNg(吴恩达)机器学习笔记——第一周

    一.初识机器学习 何为机器学习?A computer program is said to learn from experience E with respect to some task T an ...

  5. 吴恩达机器学习笔记(六) —— 支持向量机SVM

    主要内容: 一.损失函数 二.决策边界 三.Kernel 四.使用SVM (有关SVM数学解释:机器学习笔记(八)震惊!支持向量机(SVM)居然是这种机) 一.损失函数 二.决策边界 对于: 当C非常 ...

  6. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记

    Week1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  7. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记(完结)

    Week 1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  8. 吴恩达机器学习笔记 —— 19 应用举例:照片OCR(光学字符识别)

    http://www.cnblogs.com/xing901022/p/9374258.html 本章讲述的是一个复杂的机器学习系统,通过它可以看到机器学习的系统是如何组装起来的:另外也说明了一个复杂 ...

  9. [吴恩达机器学习笔记]12支持向量机5SVM参数细节

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.5 SVM参数细节 标记点选取 标记点(landma ...

随机推荐

  1. ROS_Kinetic_02 ROS Kinetic 迁移指南及中文wiki指南(Migration guide)

    ROS_Kinetic_02 ROS Kinetic 迁移指南(Migration guide) 对于ROS Kinetic Kame有些功能包已经更新改变,提供关于这些包的迁移注意或教程.主要针对于 ...

  2. Linux IPC实践(12) --System V信号量(2)

    实践1:信号量实现进程互斥 父子进程执行流程如下: 父进程 子进程 P P O(print) X(print) sleep sleep O(print) X(print) V V sleep slee ...

  3. XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)

    XBMC分析系列文章: XBMC源代码分析 1:整体结构以及编译方法 XBMC源代码分析 2:Addons(皮肤Skin) XBMC源代码分析 3:核心部分(core)-综述 XBMC源代码分析 4: ...

  4. 开源视频监控系统:iSpy

    iSpy是一个开源的视频监控软件,目前已经支持中文.自己用了一下,感觉还是很好用的.翻译了一下它的介绍. iSpy将PC变成一个完整的安全和监控系统 iSpy使用您的摄像头和麦克风来检测和记录声音或运 ...

  5. 打造你的开发神器——介绍Android Studio上的几个插件

    这个月因为各种事情在忙,包括赶项目,回老家,还有准备旅游的事,所以应该写不了四篇博客了.今天介绍一下关于Android Studio 的几个好用的插件,都是我在用的,它们或能帮你节省时间,或者让你心情 ...

  6. 【LaTeX排版】LaTeX使用--入门基础<一>

    经过两个多星期,毕业论文终于写完了.由于自己对Word软件并不是很熟悉,再加上在数模时见识过LaTex的强大之处,于是就决定用LaTex进行论文的排版.使用LaTex可以避免像Word那样换台机器而出 ...

  7. OAF实现下拉菜单联动

    当需要输入多个下拉菜单选项时,可能某些下拉菜单是有级联关系的.这时候就需要使用级联的下拉菜单来解决.下面的教程将介绍如何使用ppr制作级联下拉菜单 一.新建AM 在test.oracle.apps.c ...

  8. Swift之GCD 使用指南2

    Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸 ...

  9. C++模板总结

    在编写含有模板的程序的时候,我还是按照一个头文件声明,一个源文件的方法来组织,结果编译的时候总出现一些很奇怪的语法问题,但程序明明是没有问题的.后来经过查阅才知道原来是因为C++编译器不支持对模板的分 ...

  10. JAVA中重写equals()方法的同时要重写hashcode()方法

    object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...