机器学习记录(一)
注:本文是在观看吴恩达教授的机器学习教程视频后进行的总结,这里全部都是在matlab中完成的,当然也可以使用Octave,因为本人电脑中之前下载了matlab,所以就不用Octave了。
1.一些基本操作
- 加+

- 减-

- 乘*

- 除/

- 指数运算 ^

- 还有常见的逻辑运算:等于 (==) 、不等于 (~=)(注意不要写成 !=) 、与 (&&) 、或 (||) ,并用 0 表示为真(True), 1 表示为假(False)。还有异或运算 xor ,如 xor(0,1) 。

- 注释使用%

- 在Octave中可以使用PS1('gzb>>')命令来更改等待命令的样式,但是在matlab中没有PS1命令。
2、变量
- 使用命令: a = 4 (把4的值赋给a) , 直接打印结果;如果将命令改为 a = 4; 则不会打印结果。在 matlab 中 " ; " 隐藏打印输出。如果想看变量 a 的值,只需输入变量名,或者使用命令: disp(a) 。
- 将字符串或布尔值(true or false)赋给变量b
- format long 命令输出字符串默认的位数,format short 命令输出少量小数点后位数。也可以使用 "0.3%f" 表示代替c放在这里并显示 c值的小数点后三位数字 。
3、矩阵与向量
- 建立一个矩阵 A 输入命令 A = [1 2; 3 4; 5 6] 这会产生一个 3x2的矩阵 A ,第一行是 1 2 ,第二行是 3 4, 第三行是 5 6,分号的作用其实就是在矩阵内换行到下一行。或者也可以使用矩阵 B 的方式建立一个矩阵。
- 同理可以建立一个一维行向量C=[1,2,3],或建立一个列向量D=[1;2;3]
- 矩阵的计算和数据处理
假设有3个矩阵,A为3x2,B为3x2,C为2x2。则矩阵间的运算有:A*C(矩阵相乘)、A.*C(矩阵对应元素相乘)、A.^2(矩阵A中元素平方)、1./A(矩阵A中元素求倒数)。

- 索引
如何获取矩阵中元素的值?如何在原有的矩阵基础上增加一列或一行?下面的命令可以解决以上问题。
A(3,2)——找到第3行第2列
A(2,:)——获得第2行所有元素
A(:,2)——获得第2列所有元素
A([1,3],:)——获得第1、3行所有元素
A=[A,[100,101,102]]——在矩阵A右边新增一列
A(:,2)=[10;11;12]——用新的列向量替换矩阵A中的第2列
A(:)——把矩阵A中的所有元素合为一个单独的列向量
C=[A,B]——将矩阵A和B合为一个新的矩阵C
C=[A;B]——将矩阵A和B组合为一个2列的新矩阵

- 一些特殊的矩阵生成命令,如:ones(3,2)--生成一个3x2的矩阵,且矩阵元素均为1;zeros(2,3)--生成一个2x3的矩阵,且矩阵元素均为0;eye(3)--生成一个3x3的单位矩阵;rand(1,3)--随机生成一个1x3的矩阵;randn(1,3)--随机生成一个服从高斯分布/正态分布的矩阵。
- 此外还可以使用命令v=1:0.1:2来构建矩阵,从1到2以0.1为步长,一般默认步长为1。

- 使用hist()命令可以绘制直方图,这里用hist()来验证高斯分布。

h(w)

h(w,50)
4、移动数据
- 矩阵A为3x2的矩阵,使用命令size(A)可以返回矩阵A的大小(行和列);size(A,1)返回矩阵A第一维度的大小(行数);size(A,2)返回矩阵A的列数;length(A)返回矩阵A最大维度的大小。

- 如何在文件系统中加载和查找数据?
命令pwd可以查找当前文件所在路径;cd '这里是新的路径'命令可以改变当前文件的路径;ls命令列出该路径下所有文件;load data.txt 命令将桌面的data.txt文件载入matlab,载入后data命令可直接返回文本里面的数据;who命令可显示当前matlab中存储的所有变量,whos命令可列出所有变量,还列出了变量的维度、占用的内存、数据类型。clear a 命令则是清除变量a;V=data(1:5)将data中前5个数据赋值向量V,在通过命令save newdata.txt V -ascii;命令将向量V的数据以ASCII码的形式保存到新的文件中。

保存到桌面如下:

5、数据绘制
首先,绘制一个正弦函数y1

再绘制一个余弦函数y2,这里余弦函数的图像会覆盖正弦函数的图像。


如果我们想要y1不被覆盖,则可以使用命令hold on;再输入plot(t,y2,'r')在同一个窗口绘制图像(r表示红色)


- 如何给图像打标签?
xlabel('这里是标签内容')——给X轴打标签
ylabel('这里是标签内容')——给Y轴打标签
legend('这里是标签内容','这里是标签内容')——给图像中的曲线打标签
title('这里是标题内容')——标题

我们也可以在两个不同的窗口绘制分别绘制图像。命令如下:



也可以将一个窗口分为1x2的格子,分别使用不同格子。


- 如何改变刻度?
![]()

- 生成5x5的彩色格图,不同颜色对应不同的,magic为幻方矩阵,此函数返回由 1 到 n2 的整数构成并且总行数和总列数相等的 n×n 矩阵。n 的阶数
必须是大于或等于 3 的标量才能创建有效的幻方矩阵。


将彩色格图转化为灰度直方图,右边为不同灰度对应不同值。
![]()

6、控制语句if、while和for的用法
- for语句的结构为如下图所示,注意逗号和end
- while语句的结构如下:(注:下面V为前面定义的矩阵)
- while中包含break的情况:(break跳出循环)
- if语句的用法:(z注:有几个if就有几个end)

7、如何定义和调用函数?
- 首先,在需要保存的路径下创建.m后缀的文件,windows可以使用写字板而不建议用记事本来定义函数,调用时直接调用文件名即可。(如果路径与当前路径不一致,可以使用addpath命令来添加搜索路径)
定义:

调用:
- 另外定义一个函数可以返回多个值 。

8、利用matlab计算代价函数的值J
假设给定的训练集如下,需根据训练集计算出代价函数的值。

首先定义代价函数,再在matlab中调用函数。定义及调用如下:


9、向量化
向量化可以减少代码,提高运行效率。向量化后的代码比未向量化的代码简洁许多。
(注:matlab中下标从1开始,而不是从0开始,所以 j=1:n+1)

浙公网安备 33010602011771号