吴恩达机器学习 学习笔记 之 五 Octave 学习

5-1 Basic Operations —— 基本操作

 Octave是一种很好的原始语言(prototyping language),使用Octave 你能快速地实现你的算法,剩下的事情,你只需要进行大规模的资源配置,你只用再花时间用C++或Java这些语言把算法重新实现就行了。开发项目的时间是很宝贵的,机器学习的时间也是很宝贵的。所以,如果你能让你的学习算法在Octave上快速的实现,基本的想法实现以后,再用C++或者Java去改写,这样你就能节省出大量的时间。

 据我所见,人们使用最多的用于机器学习的原始语言是Octave、MATLAB、Python、NumPy 和 R。

 Octave很好,因为它是开源的。当然 MATLAB也很好,但它不是每个人都买得起的。貌似国内学生喜欢用收费的matlab,matlab功能要比Octave强大的多,网上有各种D版可以下载。这次机器学习课的作业也是用matlab的。如果你能够使用MATLAB,你也可以在这门课里面使用。

 如果你会Python、NumPy或者R语言,我也见过有人用 R 的,据我所知,这些人不得不中途放弃了,因为这些语言在开发上比较慢,而且,因为这些语言如:Python、NumPy的语法相较于Octave来说,还是更麻烦一点。正因为这样,所以我强烈建议不要用NumPy或者R来完整这门课的作业,我建议在这门课中用Octave来写程序。

 本视频将快速地介绍一系列的命令,目标是迅速地展示,通过这一系列Octave的命令,让你知道Octave能用来做什么。

吴恩达机器学习 学习笔记 之 五 Octave 学习_第1张图片

图1 基本数学运算

 请注意,不等于符号的写法是这个波浪线加上等于符号 ( ~= ),而不是等于感叹号加等号 ( != ),这是和其他一些编程语言中不太一样的地方。

图2 等于 不等于

图3 逻辑与、或

图4 异或

从左向右写着 Octave 324.x版本,是默认的Octave提示,它显示了当前Octave的版本,以及相关的其它信息。

如果你不想看到那个提示,这里有一个隐藏的命令

输入命令

图5 隐藏提示

现在命令提示已经变得简化了。

图6 赋值

如果你想分配一个变量,但不希望在屏幕上显示结果,你可以在命令后加一个分号,可以抑制打印输出,敲入回车后,不打印任何东西。

其中这句命令不打印任何东西。

现在举一个字符串的例子:变量b等于"hi"。

C等于3大于等于1,所以,现在C变量的值是真。

如果你想打印出变量,或显示一个变量,你可以像下面这么做:

设置A等于圆周率π,如果我要打印该值,那么只需键入A像这样就打印出来了。

吴恩达机器学习 学习笔记 之 五 Octave 学习_第2张图片

对于更复杂的屏幕输出,也可以用DISP命令显示:

这是一种,旧风格的C语言语法,对于之前就学过C语言的同学来说,你可以使用这种基本的语法来将结果打印到屏幕。

例如 sprintf命令的六个小数:0.6%f ,a,这应该打印π的6位小数形式。

也有一些控制输出长短格式的快捷命令:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第3张图片

下面,让我们来看看向量和矩阵:

比方说建立一个矩阵A

吴恩达机器学习 学习笔记 之 五 Octave 学习_第4张图片

 

对A矩阵进行赋值

考虑到这是一个三行两列的矩阵

你同样可以用向量

建立向量V并赋值1 2 3,V是一个行向量,或者说是一个3 ( 列 )×1 ( 行 ) 的向量,或者说,一行三列的矩阵。

如果我想,分配一个列向量,我可以写“1;2;3”,现在便有了一个3 行 1 列的向量,同时这是一个列向量。

下面是一些更为有用的符号,如:

V=1:0.1:2

这个该如何理解呢:这个集合V是一组值,从数值1开始,增量或说是步长为0.1,直到增加到2,按照这样的方法对向量V操作,可以得到一个行向量,这是一个1行11列的矩阵,其矩阵的元素是1 1.1 1.2 1.3,依此类推,直到数值2。

我也可以建立一个集合V并用命令“1:6”进行赋值,这样V就被赋值了1至6的六个整数。

这里还有一些其他的方法来生成矩阵

例如“ones(2, 3)”,也可以用来生成矩阵:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第5张图片

元素都为2,两行三列的矩阵,就可以使用这个命令:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第6张图片

你可以把这个方法当成一个生成矩阵的快速方法。

w为一个一行三列的零矩阵,一行三列的A矩阵里的元素全部是零:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第7张图片

还有很多的方式来生成矩阵。

如果我对W进行赋值,用Rand命令建立一个一行三列的矩阵,因为使用了Rand命令,则其一行三列的元素均为随机值,如“rand(3, 3)”命令,这就生成了一个3×3的矩阵,并且其所有元素均为随机。

吴恩达机器学习 学习笔记 之 五 Octave 学习_第8张图片

数值介于0和1之间,所以,正是因为这一点,我们可以得到数值均匀介于0和1之间的元素。

如果,你知道什么是高斯随机变量,或者,你知道什么是正态分布的随机变量,你可以设置集合W,使其等于一个一行三列的

N矩阵,并且,来自三个值,一个平均值为0的高斯分布,方差或者等于1的标准偏差。

吴恩达机器学习 学习笔记 之 五 Octave 学习_第9张图片

还可以设置地更复杂:

并用hist命令绘制直方图。

绘制单位矩阵:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第10张图片

如果对命令不清楚,建议用help命令:

以上讲解的内容都是Octave的基本操作。希望你能通过上面的讲解,自己练习一些矩阵、乘、加等操作,将这些操作在Octave中熟练运用。

在后面的小节中,将会涉及更多复杂的命令,并使用它们在Octave中对数据进行更多的操作。

5-2 Moving data around —— 移动数据

在这段关于 Octave的辅导课视频中,我将开始介绍如何在 Octave 中移动数据。

如果你有一个机器学习问题,你怎样把数据加载到 Octave 中?

怎样把数据存入一个矩阵?

如何对矩阵进行相乘?

如何保存计算结果?

如何移动这些数据并用数据进行操作?

本节中的程序如下:

吴恩达机器学习 学习笔记 之 五 Octave 学习_第11张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第12张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第13张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第14张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第15张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第16张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第17张图片

注意:

  •  size() 与 length()的区别

size()获取矩阵的行数和列数,并存储在一个1x2的矩阵中。

 length()获取矩阵的最大维度,故而length(A_3*2) = 3 。所以,通常,length()用于向量。

  • 路径问题

在打开Octave时,就已经在一个默认路径下,这个路径是Octave的安装路径。

 pwd :显示当前路径

 cd :改变路经

 ls :列出当前路径上的所有文件和文件夹

  • 加载文件

load filename

load('filename')

  • 查看当前路径下的文件

 who : 列出当前路径下,所有文件的文件名

 whos : 列出当前路径下,所有文件的详细信息,包括文件名、数据格式等等。

  • 删除变量

 clear variableName :删除某个变量

 clear :删除所有变量

  • 存储数据到文件

 save filename variableName :将变量variableName中的值存储到文件fileName中,例如save hello.dat v。

save filename variableName -ascii :设置文件中数据的编码格式为ascii,这样就可以直接打开文件查看数据

了。否则,像上面没有设置编码格式的方式,将默认存储为二进制格式。

 

 对于其他的命令,此处便不做详细介绍了。通过这几个命令可以发现, Octave的命令与Matalab非常相近,不过某些命令的使用方式更加简洁。

 没有必要把这些命令都记住,你也不可能记得住。你要做的就是,了解一下你可以用哪些命令,做哪些事。这样在你今后需要编写学习算法时,如果你要找到某个Octave 中的命令,你可能回想起你之前在这里学到过,然后你就可以查找课程中提供的程序副本,这样就能很轻松地找到你想使用的命令了。

5-3 Computing  on data —— 数据计算

吴恩达机器学习 学习笔记 之 五 Octave 学习_第18张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第19张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第20张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第21张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第22张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第23张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第24张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第25张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第26张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第27张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第28张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第29张图片

5-4 Plotting data —— 绘制数据

吴恩达机器学习 学习笔记 之 五 Octave 学习_第30张图片

subplot命令,我们要使用subplot(1,2,1),它将图像分为一个1*2的格子,也就是前两个参数,然后它使用第一个格子,也就是最后一个参数1的意思。

 

我现在使用第一个格子,如果键入plot(t, y1),现在这个图显示在第一个格子。如果我键入subplot(1,2,2),那么我就要使用第二个格子,键入plot(t, y2);现在y2显示在右边,也就是第二个格子。

最后一个命令,你可以改变轴的刻度,比如改成[0.5 1 -1 1],输入命令:axis([0.5 1 -1 1])也就是设置了右边图的x轴和y轴的范围。

 

让我们设置A等于一个5×5的magic方阵:

我有时用一个巧妙的方法来可视化矩阵,也就是imagesc(A)命令,它将会绘制一个5*5的矩阵,一个5*5的彩色格图,不同的颜色对应A矩阵中的不同值。

 

我还可以使用函数colorbar,让我用一个更复杂的命令 imagesc(A),colorbar,colormap gray。这实际上是在同一时间运行三个命令:运行imagesc,然后运行,colorbar 然后运行colormap gray。

它生成了一个颜色图像,一个灰度分布图,并在右边也加入一个颜色条。所以这个颜色条显示不同深浅的颜色所对应的值。

使用逗号连接函数调用。如果我键入a=1,b=2,c=3然后按Enter键,其实这是将这三个命令同时执行,或者是将三个命令一个接一个执行,它将输出所有这三个结果。

这很像a=1; b=2;c=3;如果我用分号来代替逗号,则没有输出出任何东西。

这里我们称之为逗号连接的命令或函数调用。

吴恩达机器学习 学习笔记 之 五 Octave 学习_第31张图片

现在你知道如何绘制Octave中不同的图像,在下面的视频中,我将告诉你怎样在Octave中,写控制语句,比如ifwhile for语句,并且定义和使用函数。

5-5 Control Statements - for、while、if 

吴恩达机器学习 学习笔记 之 五 Octave 学习_第32张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第33张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第34张图片

吴恩达机器学习 学习笔记 之 五 Octave 学习_第35张图片

你可能感兴趣的:(机器学习,吴恩达,机器学习,斯坦福,Andrew,NG)