吴恩达机器学习笔记之Octave/Matlab教程

 

Octave:

基本运算符

用百分号表示注释,true为数值1,false为数值0,不等号表示为~=;例如,1 ~= 2,返回的结果为1,即true。

要改变Octave的提示符,代码为:PS1('>> ');  这样把Octave的提示符改为引号内的字符。

;可以不打印复制的变量,与C相同。

矩阵中;的意思表示切换到下一行。

Octave或Matlab中数组的索引是从1开始的,而不是从0开始。

Matlab默认将数学运算符解释为矩阵运算符,如果要指定为数值运算符,需要用点乘即 .*

打印显示:

disp(a);

disp(sprintf('2 decimals: %0.2f ', a))

disp(sprintf("6 decimals %0.6f " , a))

format long;                     显示最长的数值显示

format short;                   显示较短的数值显示

矩阵运算:

ones(2,3)                         生成一个2行3列的全1矩阵

zeros(2,3)                        生成一个2行3列的全0矩阵

rand(2,3)                          生成一个2行3列的随机矩阵,矩阵中每一个元素都在0到1之间

randn(2,3)                        生成一个2行3列的服从(0,1)高斯分布的矩阵

eye()                                 生成单位矩阵

hist()                                 绘制柱状图

hist(a,100)                        绘制100个a的柱状图

矩阵乘法为*,例如A*B

数据移动:

size(A)                         返回的是矩阵A的行数和列数,返回的其实是一个二维数组。

size(A,1);size(A,2) 返回的分别是矩阵A的行数和列数。

length(A)                      返回的是矩阵A中维数最大的那个,如果A是3乘2的矩阵,则返回3。但是length一般对向量使用。

A(:)                             把矩阵A按照向量化的形式转换成一个列向量,即按照列向量的形式。

pwd                                   显示当前Octave所在的目录。cd 可以改变当前目录,ls可以查看当前目录下的所有文件信息。

load  文件名.后缀名 或者 load(‘文件名.后缀名’)    可以将当前的文件加载到工作空间中。

who;whos                      who可以显示当前工作空间中所有的变量值,whos可以更详细的显示这些变量值的信息。

clear 变量名                     清除某个变量的信息,直接输入clear可以清除所有变量。

save 文件名.后缀名 变量名 -ascii  将变量的值以ascii码的形式存储到该文件中,并保存在计算机上。

计算数据:

A.*B                                 即矩阵的H积,对应元素相乘。

A.^2                                 矩阵A中的元素都取平方;在Octave中,点号.一般表示元素的运算。

1./A                                  矩阵A中的元素取倒数。

log(A),exp(A)       对数和以e为底的指数

abs(A)                         绝对值

a = [1, 15, 2, 0.5]

val = max(a)                    返回a中最大的数

[val, ind] = max(a)           返回a中最大的数,和它对应的索引

a<3                                  返回的是布尔值:1, 0, 1 , 1

find(a<3)                     找出a中所有小于3的数的索引: 1, 3, 4

sun(a)                              a中左右元素求和

prod(a)                             a中左右元素相乘,即product

floor(a),ceil(a)                向下和向上对a中元素取整

A = magic(3)                    返回一个三阶的魔方矩阵

[r,c] = find( A>= 3)            返回A中大于等于3的数所在的行和列,r代表行,c代表列

max(A),max(A,[],1)           返回A中每一列的最大值

max(A,[],2)                        返回A中每一行的最大值

max(max(A))                     返回矩阵A中所有元素的最大值

sum(A,1);sum(A,2)            A中每一列的元素求和以及每一行的元素求和

flipup(A)flipud(A)                表示向上或者向下翻转。

pinv(A)                          对A求逆,这个称为伪逆,但是不影响,还有一个叫做inv(A)。

数据绘制:(大部分和MATLAB一样)

t = [0:0.01:0.98]

y1 = sin(2*pi*4*t)

plot(t,y1)                             绘制正弦函数

hold on                               保留在当前函数上,绘制另一幅图画

xlabel('x轴标签')                 给x轴加标签

ylabel(‘y轴标签’)                 给y轴加标签

legend()                              给图标中不同的线做标签

title()                                   给图表加标题

print  -dpng  ‘文件名.png’    保存输出的图片

subplot(1,2,1)

subplot(1,2,2)                      绘制一个1行2列的图集,然后分别在第一个和第二个图标中画图。

axis([xmin xmax ymin ymax])     指定x轴,y轴坐标的取值范围

clf                                         清除图像

imagesc(A), colorbar, colormap gray;       画矩阵A的灰度图

控制语句:

注意循环后面加上end;

function y = squareThisNumber(x)

y = x^2

定义函数,函数要与Octave当前的工作目录一致,否则Octave会找不到函数的位置;也可以在Octave中增加路径

addpath('路径名称')                增加括号中的路径作为Octave的搜索路径。

代价函数:

% 代价函数的Octave代码

function J = costFunctionJ(X, y, theta)

% X is the "design matrix" containing our training examples.
% 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;     %squared errors,矩阵,所以用点乘

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

矢量(向量化):

(待更新)

过程不是很懂,给出当特征n=1时的向量化的一种梯度更新的实现:

向量化的实现:

theta = theta - alpha/ m * X' * (X * theta)

批量更新的实现:

theta_temp = theta
theta(1) = theta(1) - alpha/ m * sum((X * theta_temp - y) .* X(:,1));
theta(2) = theta(2) - alpha/ m * sum((X * theta_temp - y) .* X(:,2));

你可能感兴趣的:(机器学习笔记)