机器学习笔记(6)MATLAB/Octave基础

/*本课程笔记依托于Machine Learning——Andrew Ng(Stanford University)*/

通过前面几篇笔记的记录,我们对机器学习中线性回归方法的一些基本算法有了一些新的了解,但是机器学习毕竟属于计算机领域,是要实际应用的。我们可以选择使用常见的高级语言C/C++ JAVA Python来进行算法的实现,但是采用这些语言会带来一个问题,因为从前面的笔记中我们可以看得出来,在对线性回归的算法中有很多对于矩阵的操作,而上述的高级语言中并没有对矩阵的相关操作进行原生的支持,如果在上述高级语言中实现矩阵的相关运算,对于我们的学习成本来说太高了。鉴于上述理由我们决定采用MATLAB或者Octave。实际上MATLAB或者Octave在算法开发上的应用很广泛,硅谷的很多大公司都采用上述软件开发算法。那么MATLAB和Octave有什么区别,实际上Octave是MATLAB的开源高仿版,他可以运行95%的MATLAB代码,至于缺少的5%则是MATLAB的高级拓展库,二者语法几乎完全相似,因此无论是使用MATLAB还是Octave都可以用MATLAB来学习,因此下面简称为MATLAB

下面我们将大概理解一下MATLAB的基本用法

MATLAB和Octave是弱类型脚本语言,因此并不需要像C/C++ JAVA那样有严谨的结构,因此当我们需要执行MATLAB代码最简单就可以这么写

这样就会显示ans = 8,同样我们可以以此类推+ – * /四种基本算法以及次方运算^都可以在MATLAB中执行

这段代码中使用了逻辑判断符号==,其中一个=表示赋值运算符,==则表示逻辑判断是否相等,~=则表示判断是否相等,至于其他逻辑运算符(|| && > >= < <=)的用法和其他编程语言类似,至于异或运算,则是以xor()函数的形式出现,例如

接下来简单的介绍一下MATLAB中如何回显,所谓回显包括的是输入语句3+5是否立刻回显,以及如何在屏幕上显示一行文字

至于最后一个disp这是MATLAB的输出语句,因此在何时何地都会产生输出。对于任何比较复杂的输出都可以使用disp函数

上面展示出了几种了赋值的方法,我们可以看到变量是不需要进行声明的,而且变量没有特定的类型,字符串的表示在MATLAB中是使用”(单引号)来表示的而c的赋值内容则是一个条件表达式,我们还可以对变量赋值3.14或者3.14f,这里需要注意的是MATLAB默认对将浮点数识别为double类型,当设置为3.14f时MATLAB才会以float类型储存变量

因为MATLAB的回显特点,我们无法控制输出数据的格式,所以MATLAB给我们提供了format函数,通过format函数的参数我们可以更改显示的模式

至于其他的format参数我们可以使用help命令来查看format的参数

当然我们也可以在help后面加上所有的命令来看他们的帮助文档

前面的笔记以及上面的内容可以知道,MATLAB相对于其他语言的优势就是对矩阵的原生支持,那么下面就要简述一下MATLAB如何使用矩阵

这样就声明了一个两行三列的矩阵,也就是说矩阵行元素之间使用空格分隔,行与行之间的分隔使用分号。当然还有一个简单的生成矩阵的方法

上面的两个语句可以快速的生成数组,第一个语句是生成从0-6步长为1的数组。而第二个语句中间的0.1则规定了步长也就是说第二个语句是以步长0.1生成矩阵,自然生成范围是0-6。再说下去估计你们也就晕了,看一下运行结果吧

大概就是这样,当然我们不止可以使用这种方法创建数组

上面说到好像已经很清楚了,就不补充了,假设我们有一个数组a,如何进行矩阵的基本操作呢

假设a b为两个矩阵

这里可以类推出对于除法运算符的相关操作,同样基本操作需要符合线性代数的相关知识

下面我们看一下如何在MATLAB中移动数据,这点你可能会觉得很奇怪,这里需要解释一下,在MATLAB中内存保存的变量是可以被保存成文件的(.mat文件),这一点也和其他传统的编程语言相差很大

通过size函数可以返回一个矩阵的尺寸,说白了就是几行几列(a矩阵参照上文),也就是二行三列,第二个语句返回的是a的行数,第三个则是a的列数

同时我们还可以length命令

length命令并不像size命令那样能返回行和列,length只会返回最大的维度,例如上面的输出结果就应该是3

当然啦我们说我们是需要移动数据,也说了MATLAB中的变量是可以保存到磁盘的,首先我们需要知道MATLAB现在的工作文件夹,我们可以使用pwd命令来显示现在的工作路径,cd用于切换不同的工作路径,当然和linux一样,也可以用ls来显示当前文件夹的所有文件,当我们到达了目标文件夹也找到了目标文件,如何将目标文件载入到MATLAB中呢

用上述语句可以将1.dat文件调入到MATLAB中,当执行完了load函数时我们可以使用who命令来查看当前工作区的所有变量,这点类似于python的字典,可以查询字典中有什么变量,如果你嫌弃who显示的不够详细,我们可以键入whos来获取更详细的关于变量更详细的信息,如果我们想清除所有的数据只需要键入clear命令就可以清除当前工作区的所有变量

前面我们只讲述了如何载入变量,但是没有简述如何将工作区的变量保存到电脑里我们需要使用

这样的一句话可以将变量v保存到hello.mat里,当然我们并不是非要把变量储存为mat格式的文件,我们也可以用下面的语句将v变量储存成txt格式

当然对于矩阵有一些简单明了的显示方法例如

这三个语句分别展示了如何快速的显示矩阵中的特定项目,例如第一个语句时列出第二列的所有元素,第二个语句是列出第二行的所有元素,第三个语句则是列出第一、三行的所有元素。自然我们也可以对其进行替换操作。当然我们也可以给数组添加一行元素或添加一列元素

这样就为原来的数组添加了新的一列,同时数组还可以进行合并操作

c矩阵这样就变成了4*3的矩阵,这样就实现了矩阵的合并

如果我们希望矩阵进行竖排合并的话就需要使用

其实简单的可以理解成;就是换到下一行。这里就是和矩阵的声明很类似,使用;表示这一行的结束

我们前面已经说了很多的关于矩阵的基本操作,那么下面就要利用MATLAB进行数据的计算了

我们可以用MATLAB来进行很多数学计算,例如log()、exp(),另外我们可以对矩阵进行find()操作

用这个命令来查找数组中小于3的元素,并加以显示。(自然在任何时候都可以使用help命令来获取帮助文档)

通过sum(a)函数可以求解矩阵a内所有元素的和,prod(a)函数可以求解矩阵a所有元素的内积,floor(a)函数可以对矩阵a中的每一个元素进行向下四舍五入,也就是0.5会被向下舍入为0,ceil(a)函数可以对矩阵中的每一个元素进行向上四舍五入,也就是0.5会被向上舍入为1,max(a)函数则会返回矩阵a中的最大元素,当然max()并不只有这么几种用法

同样的,对于sum函数也有相同的用法

自然还有inv和pinv两个函数。pinv称为伪逆函数,关于这个两个函数在上面已经有了深入的讲述了

到这里数值计算基本基本说完了,现在要说一下如何用MATLAB来绘制图像

在MATLAB中我们可以使用plot函数来进行图像绘制,不过这里的绘图是给计算机大量的点,并不是直接丢给计算机一个方程,因此我们需要生成合适的矩阵

这样一组数据就可以完成绘制一幅sin(8πt)的图像

同理我们也可以绘制其他的函数图像,如果我们想要在同一个窗口绘制一条新的曲线而旧曲线不消失,我们可以使用hold on函数来保持旧图像,xlabel()函数可以设置x轴显示的文字,ylabel()可以设置y轴显示的文字,title()函数可以设置图像的标题,而legend()则可以设置图像的图例

如果我们想要保存这副图像,那么我们可以使用

来保存图像,至于plot和print的更多用法,同样可以使用help来查询

在MATLAB中我们不止可以创建一个图像显示窗口,我们可以使用figure(1)来跳转到第一个窗口

About the author

NOBUG.IN

Add comment

By NOBUG.IN

Your sidebar area is currently empty. Hurry up and add some widgets.