机器学习(第二周)(1) Octave安装和使用

Octave 简介

Octave是一种编程高级语言,旨在解决线性和非线性的数值计算问题。Octave的语法与Matlab语法类似,可以互相兼容。在机器学习中,使用Octave可以帮助你快速实现算法。

Octave 下载安装 (Windows)

官方网址为 https://www.gnu.org/software/octave/
可以很方便的找到下载安装包,是免费开源的。运行依赖于java的环境,所以之前要先安装jdk。
主窗口如下:

Octave 语法

基本数学运算: 基本数学运算直接输入就可以获取到相应的结果,并且存储到全局变量ans中
在这里插入图片描述
基本逻辑运算 其中false返回0 true 返回1
在这里插入图片描述
以及异或运算:
在这里插入图片描述
基本变量 基本赋值,不用声明类型,类型根据具体值类型转换。disp 是显示方法,format是规定显示长度
在这里插入图片描述
工作空间就会显示相应的变量
在这里插入图片描述
向量和矩阵 矩阵基本是[]生成,空格是行分割,分号是列分割。
在这里插入图片描述
其中v是一个单行矩阵,也是行向量,如果想生成列向量,则v = [1;2;3]
下面是一个按照步长生成的命令

v = 1:0.2:2

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

v = 1:5

这个会按步长1生成1到5的行向量
在这里插入图片描述
还有一些其他方法快速生成矩阵

ones(4,4)

会生成一个4 x 4 每个值都为1的矩阵
在这里插入图片描述

zeros(4,4)

在这里插入图片描述

rand(4,4)

生成一个4 x 4的值0到1的矩阵
在这里插入图片描述
使用hist来绘制直方图
在这里插入图片描述

eye(6)

使用生成单位矩阵
在这里插入图片描述
矩阵的操作

size(A)

来获取矩阵的维度,下面的A就是3行2列的矩阵,所以返回3 2
在这里插入图片描述
实际上,size(A) 返回值也是1个1 x 2的矩阵,可以直接赋值。
例如 sz=size(A)
当然你也可以size(A,1)来返回维度矩阵的第一个元素 size(A,2)来返回第二个元素
在这里插入图片描述

length(A>

返回是当前矩阵的最大维度
在这里插入图片描述
Octave 也可以使用基本的linux命令cd ls pwd

load(‘文件名’)

用于读取文件,现在在工作目录下有个文件
在这里插入图片描述

在这里插入图片描述
就可以将文件中的内容读取并赋值给A

who 可以显示系统中的变量 whos 可以更详细的显示变量
在这里插入图片描述
使用clear来清除不需要的变量,例如clear A
在这里插入图片描述

A = featuresX(1:10)

表示featuresX 矩阵第1列前10行元素组合一个行向量 赋值给A
在这里插入图片描述

save 文件名 变量名

把变量持久化成文件,保存在工作目录中

在这里插入图片描述
在这里插入图片描述
对于矩阵,也可以通过A(3,2)来快速索引矩阵第3行第2列的元素
在这里插入图片描述
键入A(3:)返回第3行的所有元素
在这里插入图片描述
键入A(:2)返回第二列的所有元素
在这里插入图片描述
键入A([1 3],: ) 来完成多行索引,这里输出的是1和3行的数据
在这里插入图片描述
之外,还可以直接对某一行赋值 如A(2:) = [10 11]
在这里插入图片描述
通过 A = [A, [100;101;102]],给A添加新的一列
在这里插入图片描述
A( : )把矩阵所有元素生成一个列向量
在这里插入图片描述
以上就是基本的矩阵操作的命令,可以看出Octave提供了很多便捷的矩阵生成和索引和组合的操作,下面就看看矩阵之前的运算

矩阵的运算

现在有矩阵A,B,C。我们来看看矩阵的运算。
在这里插入图片描述
矩阵相乘 A * C
在这里插入图片描述
矩阵点乘 A.*B
在这里插入图片描述
指数运算 A.^2 求出每个元素的平方
在这里插入图片描述
倒数运算 1./A求出每个元素的倒数
在这里插入图片描述
对数运算 log(A) 求出每个有元素的对数
在这里插入图片描述
自然数e的幂次运算exp(v)> 以自然数e为底, 以每个元素为幂的运算

在这里插入图片描述
abs(A) 对A中每个元素求绝对值
在这里插入图片描述
A’用于计算转置矩阵
在这里插入图片描述
还有一些函数用于计算
max(A)用于获取每一行的最大值 同时也可以赋值 [val, rad] = max(A)
其中val 是行向量,返回的是每一行的最大值。rad 也是行向量,返回是每一行最大值的索引
在这里插入图片描述
如果要返回每一列的最大值该怎么做呢?max(A,[],2)

在这里插入图片描述

矩阵也能进行逻辑运算,A<3 对每一个元素进行比较运算。满足条件返回1,不满足返回0
在这里插入图片描述
find(A > 3) 返回所有满足条件的元素
在这里插入图片描述
A=magic(3) magic将返回一个矩阵,称为魔方阵或者幻方。它们具有以下这样的数学性质:它们所有的行和列和对角线加起来都等于相同的值。
在这里插入图片描述
sum(A)返回是每一列的和
在这里插入图片描述
prod(A)返回是每一列的乘积
在这里插入图片描述
floor(A) 对矩阵的每个元素向下取整

在这里插入图片描述
ceil(A) 对矩阵的每个元素向上取整
在这里插入图片描述
如果要得到逆矩阵,可以使用pinv(A)
在这里插入图片描述

Octave绘图

算法在实际设计过程中,是非常抽象的。人本身还是视觉动物,把抽象生成图表更容易把握数据的规律。更容易理解算法的内容,并且可以检查数据的完整性,以及数据的边界。
Octave有非常简单的工具用来生成大量不同的图。当我用学习算法时,我发现绘制数据、绘制学习算法等,往往是我获得想法来改进算法的重要部分。在这段视频中,我想告诉你一些Octave的工具来绘制和可视化你的数据。

t=[0:0.01:1];
y1=sin(2pit);
plot(t,y1)

在这里插入图片描述
通过plot(t,y1)绘制y=sin(2 * pi * x)的图形
这个时候输入 y=cose(2 * pi * x),将清除之前的图形重新绘制cos函数
在这里插入图片描述
如果需要都显示该怎么处理呢
在图形之后输入hold on 来保持上一个图形
在这里插入图片描述
给当前的图形加一些说明
xlabel(‘time’) 给x轴加一个说明time
ylabel(‘value’) 给y轴加一个说明value
legend(‘sin’,‘cos’) 在右上角给每条曲线加说明
title<‘my plot’> 给图标加个标题
在这里插入图片描述
如果你想把生成的图像保存下来,使用命令print dpng ‘myPlot.png’。png是一个图形格式,他将在你的工作目录保存图形。
在这里插入图片描述
在这里插入图片描述
输入figure(1);plot(t,y1); 会在弹出1标志的窗口,显示图像
输入figure(2);plot(t,y2); 会在弹出2标志的窗口,显示图像
这两个图形彼此独立。
在这里插入图片描述
subplot命令,我们使用subplot(1,2,1)把图像分为一个1x2的格子。由前面2个参数决定。然后它使用第一个格子,由第三个参数决定。
在这里插入图片描述
根据当前选择的格子设定x,y轴范围:axis([0.5,1,-1,1]) 设置当前图形的x轴为0.5到1,y轴为-1到1
在这里插入图片描述
clf 清除一幅图像
在这里插入图片描述
imagesc(A) 它将绘制一个矩阵大小维度的彩色格图。

在这里插入图片描述
colorBar 将生成一个颜色说明条
在这里插入图片描述
colormap gray 将颜色图转换成灰度图

在这里插入图片描述

Octave的循环和条件

Octave作为高级语言,循环和条件语句也是必不可少的一部分。如forwhileif语句。
for使用
在这里插入图片描述
同时也可以遍历一个矩阵
在这里插入图片描述
while 用法
输出i的值,直到i的值为0
在这里插入图片描述
将i的值自增到10
在这里插入图片描述
和其他语言的循环语句一样,可以使用continue break 来操作循环语句。
还有if else语句 判断逻辑条件
在这里插入图片描述

Octave函数

函数的定义,其中y是返回值。x1,y1是参数 addNum是函数名。
在这里插入图片描述
你也可以给函数定义多个返回值
在这里插入图片描述
通过以上 我们可以定义代价函数
在这里插入图片描述
其中x是样本数据集
y是结果样本,theta就是学习值。

向量化函数运算

在数组运算中,传统的方式都是通过循环来进行数组与数组之间的运算。但是在机器学习中,循环记录效率太低。而把数据转换成矩阵向量,运用向量运算。可以得到更高的效率。代码量更少,计算更简单。
比如说线性回归函数
在这里插入图片描述
常规的代码实现方式为:

//实现线性回归函数 golang
var sum = 0
for i := 0; i<len(x);i++ {
	sum += theta[i] * x[i]
}
//实现线性回归函数 Octave
sum = sum(theta * x')

在机器学习中,使用向量化计算比使用循环逻辑要快的多。机器学习可以获取更高的效率。因此使用向量化实现方式,你应该是能够得到一个高效得多的线性回归算法。而当你向量化我们将在之后的课程里面学到的算法,这会是一个很好的技巧,无论是对于Octave 或者一些其他的语言 如C++、Java 来让你的代码运行得更高效。

猜你喜欢

转载自blog.csdn.net/qq_35554975/article/details/86549620