一. 矩阵知识复习
此文只给出一些机器学习中常用的矩阵知识和公式,方便复习和查询。
1.1 矩阵乘法
1.2 矩阵乘法性质
- 不满足交换律:
A×B≠B×A - 满足结合律:
A×(B×C)=(A×B)×C -
(A+B)2=A2+AB+BA+B2 -
(AB)2=(AB)(AB)≠A2B2
1.3 矩阵的逆和转置
- 矩阵的逆:若矩阵A 是一个 m
× m矩阵(方阵),则:AA−1=A−1A=I - 矩阵的转置:设A 为 m
× n 阶矩阵(即m行n列), 第i行j列的元素为a(i, j), 定义A的转置为这样一个n× m阶矩阵B, 满足b(i, j) = a(j, i)(B的第i行j列元素是A的第j行i列元素), 即AT=B (或A′=B )。
1.4 转置基本性质
-
(A±B)T=AT±BT -
(A×B)T=BT×AT (在公式化简中常用到) -
(AT)T=A
1.5 逆矩阵运算规律
-
(AB)−1=B−1A−1 -
(kA)−1=A−1/k -
(A−1)T=(AT)−1 -
(An)−1=(A−1)n
注意:在matlab和octave中用
二. Octave基本操作
octave是一款免费的科学计算软件,提供了强大的线性与非线性的数值计算,同时可以提供了强大的机器学习算法和各种数据可视化的功能,它的语法简单(几乎想数学公式一样),并且在很多语法上与MATLAB是相似的,很适合作为机器学习的一款工具。
2.1 安装
安装步骤请参考:http://mooc.guokr.com/note/15825/
2.2 基本操作
- octave-cli 进入octave的命令行
- 基本运算符: +、-、x、/、^
- 逻辑运算符: &&、||、xor、==、~=
- 注释: %注释的内容
- 打印: disp(a) 输出变量a的值
- 格式化输出: disp(sprintf(‘2 decimals: %0.2f’, a)) 输出两位小数点
- 常用常量:pi表示圆周率
π 、exp(2)表示e2
2.3 矩阵相关操作
- 矩阵赋值:A = [3 4; 2 16] :
[32416] - 初始化全为1的矩阵
ones(2,3) :[111111] - 初始化全为0的矩阵
zeros(2,3) :[000000] - 初始化随机数矩阵 (数值介于0和1之间)
rand(1,3) :[0.154240.421560.66853] - 初始化正态分布随机数矩阵
randn(3,3) :⎡⎣⎢⎢1.26822−1.36620−1.67345−0.12608−0.17518−0.34060−1.024540.590341.99185]⎤⎦⎥⎥ - 生成单位矩阵
eye(3) :⎡⎣⎢⎢100010001⎤⎦⎥⎥ - 生成魔方矩阵
magic(3) :⎡⎣⎢⎢834159672⎤⎦⎥⎥
2.4 移动元素
- 从文件加载数据:load(‘filename’) 更多信息参考命令:
help load - 保存数据到文件: save xxx.mat v 以二进制格式存储变量v到文件xxx.mat中; save xxx.txt v 以文本格式存储
- 显示当前内存中的变量信息: whos
- 清除内存中的变量: clear
- 取矩阵的某个元素 A = [1 2; 3 4; 5 6];
A(3,2)=6 -
取矩阵的某行或某列的元素 A = [1 2; 3 4; 5 6];
A(2,:)=[34]取第二行所有元素 A(:,2)=⎡⎣⎢⎢246⎤⎦⎥⎥取第二列所有元素 A([1 3],:)=[1526]取第一行和第三行的元素 - 给矩阵的某一行或列赋值 A = [1 2; 3 4; 5 6];
A(:,2)=[10;11;12]给第二列赋值(类似可以给某一行赋值) 输出A:⎡⎣⎢⎢135101112⎤⎦⎥⎥ -
给矩阵增加一行或列 A = [1 2; 3 4; 5 6];
A=[A,[100;101;102]];给A右侧增加一列 输出A:⎡⎣⎢⎢135246100101102⎤⎦⎥⎥ -
矩阵连接 A = [1 2; 3 4; 5 6]; B = [11 12; 13 14; 15 16];
C = [A B];输出C:⎡⎣⎢⎢135246111315121416⎤⎦⎥⎥
C = [A ; B];输出C:⎡⎣⎢⎢⎢⎢⎢⎢⎢135111315246121416⎤⎦⎥⎥⎥⎥⎥⎥⎥
2.5 计算
A=[1 2; 3 4; 6 7]; B = [11 12; 13 14; 15 16]; C = [1 1; 2 2];
1. 矩阵乘法
2. 矩阵点乘 (一般点操作为元素位运算)
3. 矩阵点除
4. 其他函数 abs、log、exp等均为对矩阵每个元素做运算
5. 矩阵
6. 求逆矩阵: A = [3 4; 2 16]; pinv(A) 或
7. 求转置: A = [3 4; 2 16];
8. 求矩阵的秩 A = [1 2; 3 4; 5 6];
9. 求矩阵元素的和: A = [1 2; 3 4; 5 6];
10. 求向量的长度 V = [1 2 3 4];
11. 求最大或最小元素 A = [1 2; 3 4; 5 6]; max 、min 用法同sum函数
12. 查找符合条件的元素find函数,更多用法参考
help load: 2.6 画图相关
Octave 有非常简单的工具用来生成大量不同的图,帮助我们绘制数据,绘制学习算法,并改进学习算法。
-
绘制2D 图,如正弦函数
y=sin(2πx) :x=[0:0.01:1];y=sin(2∗pi∗x);plot(x,y); 给图像增加标记: xlabel(‘time’),ylabel(‘value’),legend(‘sin’),title(‘title’), plot(x, y, ‘r’):
在同一张图上绘制多条曲线,使用hold on函数:
y1=sin(2∗pi∗x); y2=cos(2∗pi∗x); plot(x,y1,′r′); hold on; plot(x,y2,′b′); legend(′sin′,′cos′); 保存图片: print -dpng ‘myplot.png’ 以png格式保存图片
- 绘制多张图:figure(1); plot(x,y1);绘制第一张图; figure(2); plot(x, y2);绘制第二张图
将一张图画在不同区域中: subplot命令
subplot(1,2,1); plot(x,y1,′r′); legend(′sin′); subplot(1,2,2); plot(x,y2,′b′); legend(′cos′); 绘制直方图: hist(x)
w=−6+sqrt(10)∗(randn(1,1000)); hist(w); 绘制3D图: surf(X, Y, Z)
x=linspace(−2,2,25);在x轴上取25点 y=linspace(−2,2,25);在y轴上取25点 [xx,yy]=meshgrid(x,y);xx和yy都是21x21的矩阵 zz=xx.∗exp(−xx.2−yy.2);计算函数值,zz也是21x21的矩阵 surf(xx,yy,zz);画出立体曲面图 - 绘制等高线图: contour(X, Y, Z)