Coursera机器学习笔记 第2周 第五章 Octave/Matlab教程(二)

第五章 Octave教程(二)

5.4 绘图数据

参考视频 : 5 - 4 - Plotting Data (10 min).mkv

Octave可以绘制图表来可视化数据。例1

PS1('>> ');
t=[0:0.01:0.98];
y1=sin(2*pi*4*t);
plot(t,y1); // 绘制正弦函数
y2=cos(2*pi*4*t);
plot(t,y2); // 绘制余弦图,在此之前消除原来的正弦图
hold on; // 将图像绘制在旧的上
plot(t,y1); 
plot(t,y1,'r'); // 绘制正弦图,颜色为红色
xlabel('time'); // 标识横坐标
ylabel('value'); // 标识纵坐标
legend('sin','cos'); // 标识曲线
title('myplot'); // 显示图的名字
print -dpng 'myplot.png' // 保存图像,png格式
help plot; // 查看plot帮助
close; // 关闭图像

figure(1); // 新的图像
plot(t,y1);
figure(2); // 又一个新的图像
plot(t,y2);
close;
close;

figure(1);
subplot(1,2,1); // 将图像分成1*2的格子,使用第1个格子
plot(t,y1); // y1显示在左边
subplot(1,2,2); // 使用第2个格子
plot(t,y2); // y2显示在右边
axis([0.5 1 -1 1]); // 此时作用在右图上,修改了右图的横纵坐标

clf; // 清除一幅图像

例2

A=magic(5);
imagesc(A);
colorbar; // 添加颜色条 颜色条表示不同深浅的颜色所对应的值
colormap gray; // 变成灰度图像
// 上数三个命令可以用一行命令来代替:imagesc(A),colorbar,colormap gray(命令依次执行)

imagesc(magic(15)),colorbar,colormap gray // 生成15*15的灰度图像

5.5 控制语句:for,while,if语句

参考视频 : 5 - 5 - Control Statements_ for, while, if statements (13 min).mkv

用Octave程序写控制语句,如:for、while、if等,并且如何定义和使用方程。
1.基础

PS1('>> ');
v=zeros(10,1);
v
// for 1
for i=1:10,
   v(i)=2^i;
end;
v

// for 2
indices=1:10;
indices
for i=indices,
   disp(i);
end;

// while 1
i=1;
while i <= 5,
   v(i)=100;
   i=i+1;
end;
v

// while 2 and break
i=1;
while true,
   v(i) = 999;
   i = i+1;
   if i ==6,
      break;
   end;
end;
v

// if-else
v(1)
v(1) = 2;
if v(1) == 1,
   disp('The value is one');
elseif v(1) == 2,
   disp('The value is two');
else
   disp('The value is not one or two');
end;

2.函数

// 函数定义例1-返回一个值
function y = squareThisNumber(x)

y = x^2;

end

y = squareThisNumber(5); // 函数调用

// 函数定义例2-返回两个值
function y1,y2 = squareAndCubeThisNumber(x)

y1 = x^2;
y2 = x^3;

end

[a,b] = squareAndCubeThisNumber(5);

复杂一点

function J = computeCost(X, y, theta)
% Compute cost for linear regression
% X is the "design matrix" containing our training example.
% Y is the class labels

m = size(X,1); % number of training examples
predictions = X*theta; % predictions of hypothesis on all m examples
sqrErrors = (predictions-y).^2; % square errors

J = 1/(2*m) * sum(sqeErrors);

end

5.6 向量化

参考视频 : 5 - 6 - Vectorization (14 min).mkv

本节介绍有关向量化的内容。无论你是用Octave还是别的语言(Python、Java或C++),这些语言中都有各种线性代数库。库文件内置,容易获取。当你实现机器学习算法时,你应该好好利用这些线性代数库,调用他们,这样会很有效。

1.举个例子,这是常见的线性回归假设函数:

h(θ)=j=0nθjxj h ( θ ) = ∑ j = 0 n θ j x j

如果你想要计算 hθ(x) h θ ( x ) ,注意右边是求和,那么你可以从 j=0 j = 0 计算到 j=n j = n ,并求和。但是换一种方式想,把 hθ(x) h θ ( x ) 看作 θTx θ T x ,那么就可以写成两个向量的内积。
θ=θ0θ1θ2x=x0x1x2 θ = [ θ 0 θ 1 θ 2 ] x = [ x 0 x 1 x 2 ]

2.Matlab代码举例:

这是未向量化的代码实现方式。

// Unvectorized implementation
prediction = 0.0;
for j = 1:n+1, // Matlab中下标从1开始
    prediction = prediction + theta(j) * x(j);
end;

这是向量化的代码实现。

// Vectorized implementation
prediction = theta' * x; // 向量相乘

3.C++代码举例

// Unvectorized implementation
double prediction = 0.0;
for (int j = 0; j <= n; j++)
{
    prediction += theta[j] * x[j];
}

// Vectorized implementation
double prediction = theta.transpose() * x;

将两个向量相乘,如果使用一个库来做内积,你可以得到一段更简单、更有效的代码。

4.更复杂的例子

θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)1θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)2(n=2) θ 0 := θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ 0 := θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) θ 0 := θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 2 ( i ) ( n = 2 )

我们用这条规则对j=0, 1, 2, … ,n更新对象 θj θ j 。假设我们有两个特征量(n=2),我们需要对 θ0,θ1,θ2 θ 0 , θ 1 , θ 2 进行更新,这些都应该是同步更新。简单来说,我们可以用一个for循环,让j=0,j=1,j=2来更新 θj θ j

看一下向量化的方式:将 θ θ 看做一个向量,然后用 θαδ θ − α ∗ δ 来更新 θ θ ,其中 α α 是学习率, δ=1mmi=1(hθ(x(i))y(i))x(i) δ = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i )

x(i)=x(i)0x(i)1x(i)2>δ=δ0δ1δ2 x ( i ) = [ x 0 ( i ) x 1 ( i ) x 2 ( i ) ] — > δ = [ δ 0 δ 1 δ 2 ]

So the vectorized implementation is:

θ:=θαδ θ := θ − α δ

有时我们使用几十或几百个特征量来计算线性回归,当你使用向量化实现时,运行速度就会比你以前用for循环快得多。

因此使用向量化实现方式,你能够得到一个高效得多的线性回归算法。能够把学到的算法向量化是一个很好的技巧,无论是对于Octave,还是其他的语言(C++、Java等),向量化可以让你的代码运行的更高效。

5.7 工作和提交的编程练习

参考视频:5 - 7 - Working on and Submitting Programming Exercises (4 min).mkv

介绍一下这门课程提交作业的流程,以及如何是哟个作业提交系统,这个提交系统可以即时检验你的程序是否正确。

作业提交系统

目录中包含大量的文件,其中一些需要由你来编辑完成。

Octave窗口

回到Octave窗口,保证当前目录为作业目录,输入submit(),输入【登陆邮箱】,输入【Token】后按下回车,等待一段时间后就会返回作业结果,其中包含作业的分数,如果有错误的话可以修改后再提交。

【Token】在编程作业网页右边(红框标记)
Token

这就是提交作业的方法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值