Andrew Ng Mechine Learning notes

这是学习吴恩达《机器学习》的相关笔记

相关内容:深度学习计划

Octave 教程(Octave Tutorial)

Octave的语法和Matlab十分相似。而且免费,而且开源。

基本操作

%表示注释

1 == 2 %false
1 ~= 2 %相当于其他语言的 !=
&& % 与 and
|| % 或 or
xor(1,0) % 异或
PS1('>> '); % 可以改变命令提示符的前缀
a = 3 % 为变量赋值
a = 3; % 在后面加分号可以组织打印输出
b = 'hi' % 字符串
c = (3>=1) % 布尔值
a = pi; % a=3.1416
disp(a) % 用于更复杂的输出
format long % 让字符串显示默认的位数
format short % 类似long
v = 1:0.1:2 % v是一组值,从1开始,步长为0.1,一直增加到2
v = 1:6 % 1到6的六个整数
exit % 退出 octave
quit % 退出 octave

定义矩阵:

A = [1 2;3 4;5 6]
%{
A =

   1   2
   3   4
   5   6
%}
ones(2,3)
%{
一个 2*3 的矩阵,元素全为1
ans =

   1   1   1
   1   1   1
%}
2*ones(2,3)
%{
一个 2*3 的矩阵,元素全为2
ans =

   2   2   2
   2   2   2
%}
zeros(1,3)
%{
ans =

   0   0   0
%}
rand(1,3)
%{
一个 1*3 的矩阵,元素为0-1之间的随机值
ans =

   0.57054   0.68674   0.57777
%}
randn(1,3)
%{
类似,但元素值服从高斯分布(正态分布),即均值为0,标准差、方差为1
ans =

  -1.09812  -0.37640   0.89289
%}
hist(w) % 绘制直方图
eye() % 生成单位矩阵,参数为阶数

help 命令可以查看相关命令的帮助。

移动数据

size(A) % 返回矩阵大小,返回值本身也是一个矩阵
size(A,1) % 返回矩阵第 1 维度的大小
size(A,2) % 返回矩阵第 2 维度的大小
length(A) % 返回最大维度的大小

从系统加载数据

pwd % 输出当前路径
cd % 改变路径
ls % 列出文件
load featuresX.dat % 载入文件
load('featuresX.dat') % 同上
who % 显示当前内存中的所有变量
whos % 显示更详细的变量信息
clear(A) % 清除某个变量
v = priceY(1:10) % 将 priceY 的前10个元素赋给v
save hello.mat v % 将 v 保存为一个 hello.mat 的文件
clear % 清除工作空间
save hello.txt v -ascii % 存储成 ascii 编码的文档

操作数据

A(3,2) % 索引 (3,2) 位置的元素
A(2,:) % 获得第2列所有元素,: 表示该行或该列所有元素
% 索引方法也可以直接 = 用于赋值
A= [A,[100;101;102]] % 在右边附加新的列向量
A(:) % 把 A 中所有元素放入一个单独的列向量
C = [A B] %结合两个向量,A在左边,B在右边
C= [A;B] % A在上,B在下

计算数据

A*B % 矩阵相乘
A.*B % 对应元素相乘,对应的还有./
abs(v) % 所有元素的绝对值
-v % 相当与-1*v
v+1 % 所有元素+1
A‘ % 转置
val = max(A) % 最大的元素值
[val,ind] = max(a) % 返回值最大的元素值及索引
A < 3 % 和每个元素比较,并返回一个矩阵
find(A<3) % 找出所有小与3的元素并返回索引
magic(3) % 返回一个幻方,即任意行、列对角线元素加起来都等于相同的值
[r,c] = find(A>3) % 返回满足条件的元素索引,r为行,c为列
sum(A) % 返回所有元素和
prod(A) % 返回所有元素积
floor(A) % 所有元素向下取整
ceil(A) % 所有元素向下取整
pinv(A) % 求逆矩阵

数据绘制

简单的图可以帮助我们更好的理解算法内容,并且可以检查算法是否正常运行。

绘制正弦、余弦图像:

t = [0:0.001:0.98]
y1 = sin(2*pi*4*t)
plot(t,y1) % 正弦
y2 = cos(2*pi*4*t)
plot(t,y2) % 余弦
hold on % 保留旧图像,新的图像生成在原来的图上
ylabel("time") % y轴添加标签
xlabel("value") % x轴添加标签
legend('sin','cos') % 标记曲线
title("my plot") % 图像标题
print -dpng 'myPlot.png' % 保存图像
close % 关闭图像
figure(1); plot(t,y1) % 为图像标号
subplot(1,2,1) % 将图像窗口分为1*2的格子并使用第一个格子,用于在一个窗口并列显示多个图像
axis([0.5 1 -1 1]) % 设置x轴和y轴的范围,此处x为0.5——1,y为-1——1
clf % 清除图像
imagesc(A) % 可以将矩阵可视化
imagesc(A),colorbar,colormap gray % 用灰度图来展现矩阵各个部分的值

控制语句

for 循法

v = zeros(10,1);
for i=1:10,
	v(i) = 2^i;
end;
% 遍历向量 v,对每个元素执行 v(i) = 2^i
% 空格非必要

while 循环

i=1
while i <= 5,
	v(i) = 100;
	i=i+1;
end;
% 将 v 的前五个元素覆盖为 100

if 和 break

i = 1;
while true,
	v(i) = 999;
	i=i+1;
	if i == 6,
		break;
	end;
end;
% 将 v 的前五个元素覆盖为 999

if-else

if v(1)==1,
	disp('This value is one');
elseif v(1)==2,
	disp('This value is two');
else
	disp('The value is not one or two');
end;

函数

定义函数需要先创建一个以函数名字命名,.m结尾的文件

例:函数文件squareThisNumber.m

function y = squareThisNumber(x)
y = x^2

可以返回两个值:

function [y1,y2] = squareAndCubeThisNUmber(x)
y1=x^2
y2=x^3

例子

计算损失函数:

x = [1 1;1 2;1 3];
y = [1;2;3];
theta = [0;1];

costFunction.m:

function J = costFunction(x,y,theta);
m = size(x,1);
predictions = x*theta;
sqrErrors = (predictions-y).^2;
J = 1/(2*m)*sum(sqrErrors);

计算损失函数”

j = costFunction(x,y,theta)

矢量

向量化能够是我们得到一个高效得多的线性回归算法。

向量化后我们可以得到一个很重要的公式:

则梯度下降的公式为: