观看的视频来自网易云课堂——《吴恩达机器学习》
http://吴恩达机器学习 - 网易云课堂 https://study.163.com/course/courseMain.htm?courseId=1210076550&_trace_c_p_k2_=8b38dadea2254aabb5eced2e8defd456
构建大规模机器学习项目,大多使用Octave来构造算法原型以便快速实现算法
进行大规模的部署可以用C++或Java重现算法
Octave可以通过几句简单的代码快速组合复杂矩阵
Octave命令
在Octave官网https://www.so.com/link?m=b93e7AfVXt2Svsdh0DbBbcGZjoA4glXlq%2BG%2FqB6WAexJdW7WZNSu4j39lSLeIfgM8ESMxgqNRUDL2BtlDVh6jdgDr6ILRj6MDnPuV%2Fe8KNiMC6N9Ly7faXQ4fP14OG94N点击下载
随后打开Octave(CLI)也就是命令行格式,其支持各种基础数学运算1+1、逻辑运算&&、||之类,若输入判别方程,0代表False,1代表True。
大体算法类似于matlab
输出可以直接打出变量名,如:a 回车将直接打印出变量值,或用 disp(a),若需要打印字符串则需要disp(sprintf('字符串'))。
format long :会让字符串显示默认的位数
format short :输出打印少量的小数点后的位数
a = 起始值:步长:终止值
sqrt(n):n维方阵
eye(n):n维单位矩阵
ones(行,列):全1矩阵
zeros(行,列):全0矩阵
magic(n):输出任意行列,其每行、每列、每条对角线中的元素加起来都等于相同的值
rand(行,列):随机矩阵(均为介于0和1之间的随机值)
randn(行,列):符合正态分布的随机矩阵(符合高斯分布,均值为0,标准差或方差为1)
hist(矩阵名):可以直接将该矩阵绘制出一幅直方图
size(矩阵名):返回矩阵的行数和列数,生成的是1x2的矩阵
length(矩阵):得到矩阵的长度
矩阵名 = [1 2 3 ;4 5 6]:定义矩阵时,同一行内元素用空格分隔,换行使用; 切换
读取和存储数据
pwd:查看路径
cd ' 路径 ':更改路径
ls:列出桌面路径
load 文件名.dat :载入数据
who:显示Octave中存储的所有变量
whos:显示Octave中存储的所有变量、维度、占用字节数和数据类型
clear 变量名:删除变量
save 文件名.mat 变量名:将变量保存到文件中
save 文件名.txt 变量名 -ascii:将变量保存到文本文档中
操作数据
矩阵(行,列):输出该行该列指定元素
矩阵(行,:):输出该行全部元素
矩阵(:,列):输出该列全部元素
矩阵([行 行],:):输出行和行中的全部元素,其余行不算
矩阵(行,列)= [新的矩阵]:更换矩阵内的元素
矩阵(矩阵 [新矩阵]):增加列向量
矩阵(矩阵 ;[新矩阵]):增加行向量
矩阵( :):将矩阵内的元素全部输出为一列向量
计算
A * B:两个矩阵相乘
加建乘除都同上
【‘ . ’用于元素的运算】
A .* B:将A中的每一个元素与B中对应位置的元素相乘
A .^ 2:将A中的每一个元素平方
1 ./ A :将A中的每一个元素除以1
log(矩阵):对矩阵求对数运算
exp(矩阵):以e为底矩阵内元素为指数的幂运算
abs(矩阵):对矩阵求绝对值
- 矩阵:对矩阵取相反数
对矩阵内所有元素相加可以设置相同维度的全1矩阵进行相加或直接 矩阵 + 1
矩阵 ':矩阵转置
[ 命名的变量名 ,ind ] = max(矩阵):可以得到最大值及其索引
矩阵也同样适用于逻辑计算,若真输出1,假则输出0
find(矩阵逻辑运算):输出满足逻辑运算元素的索引
prod(矩阵):可以得到所有元素的乘积
floor(矩阵):使矩阵内的元素向下取整
ceil(矩阵):是矩阵内的元素向上取整
max(矩阵 , 矩阵):会生成一个由两个矩阵内较大的数形成的新的矩阵
max(矩阵):可以得到矩阵每一列的最大值
max(矩阵,[ ] .1 ):生成每一列最大值组成的行向量
max(矩阵,[ ] .2 ):生成每一行最大值组成的列向量
max(max(矩阵)):生成整个矩阵的最大值
sum(矩阵):可以得到所有元素的和
sum(矩阵,1):可以得到每一列的总和
sum(矩阵,2):可以得到每一行的总和
fipud(矩阵):使矩阵垂直翻转、上下颠倒
pinv(矩阵):对于矩阵求逆矩阵
数据绘制【同matlab】
图像绘制会便于检查数据的走向是否正确,便于改进自己的代码
首先制作 x 行向量,与 y 的函数方程
plot(x,y):绘制图像
hold on:保持图像,让新图像在旧图像的基础上绘图
xlabel(' '):添加横坐标标签
ylabel(' '):添加纵坐标标签
legend(' ' , ' ' , ... ,' '):添加图例,对每一个绘制图像进行标注
title(' '):添加标题
print -dpng '文件名.png' :保存为png文件
close:关闭Octave中显示的图像
figure(1);plot(...):打开一个窗口绘制一张图片
figure(2);plot(...):打开第二个窗口绘制
subplot(m,n,a):将图像分割成m*n的网格,其使用第a个格子
axis([x1 x2 y1 y2 ]):改变 x 和 y 的范围
clf:可以清除一幅图像
imagesc(矩阵):绘制彩色格图,不停的彩色格子代表着矩阵中不同的值
colorbar:增加颜色条,显示对应元素对应的不同的值
colormap gray:控制图像颜色为灰色系
控制语句
indices :代表索引
disp(变量):打印变量
for i=... ,
循环体 ;
end ;
while 判断式 ,
循环体;
end;
if 判别式 ,
表达式 / break;
end;
if 判别式,
表达式1;
elseif 判别式,
表达式2;
else,
表达式3;
end;
定义和调用函数
使用Octave环境定义函数,需提前创建一个文件,用函数名命名,以 .m 为结尾。 .m文件可以用记事板创建,再用写字板打开进行编辑,因为记事板会使代码间距变得很乱。
.m 文件内容:
function y = 函数名 ( x ) :返回一个值将其存放到变量y中,且有一个自变量x
y = f(x); :定义的函数主体
调用文件
首先pwd查看当前路径,可以将编辑好的.m文件放到该路径下,或者 cd 更改至文件所在路径,甚至还可以addpath(‘路径’),增加一条路径。只要在Octave中的路径内,输入函数名,Octave就可以自己找到该函数进行运算。随后直接调用函数即可。此外,Octave还支持一个自变量x返回多个值y。
绘制图像
针对课时40的代价函数计算
%计算代价函数J的.m文件
function J = costFunction(x,y,theta) %定义一个函数,x:训练样本x值、y:y轴对应值、w为自变量,返回值为J
m = size(X,1); %将x的行数当作样本数量
predictions = x *我; %预测值=wx+b,b=0
sqrErrors = (predictions - y).^2; %计算平均平方误差 = (预测值 - 目标值)^2
J = 1/(2m) * sum(sqrErrors); %计算代价函数