吴恩达机器学习笔记

线性回归和Matlab常用函数

0

机器学习有监督学习、非监督学习等;监督学习分为回归和分类,回归问题是连续的,分类问题是离散的;无监督学习有聚类问题、鸡尾酒聚会问题(即在多个音源中进行区分)等。

首先学习监督学习中的线性回归。

1 梯度下降法

梯度下降法是线性回归中求预测函数参数的重要算法。

参数theta的迭代算法,J成为代价函数,表示训练集预测值与实际值的方差 ,alpha表示学习率
(1/2)是为了方便求导后的计算
预测函数

对theta的式子进行多次迭代,使得J逐步逼近极小值,如下图所示。

需要注意的有以下几点,1.各项theta是同时进行迭代的,

2.alpha是固定的,不能太大也不能太小。

2 特征缩放

当不同特征的取值范围相差太大时,会使得梯度下降法的效率很低,因此使用特征缩放的方法,让不同特征的取值范围相近(不需要很准确)。均一化方法:

ui表示该特征在所有样本中平均值,si表示该特征在样本空间中的最大值与最小值之差

3 如何确定学习率(alpha)*

绘制一个在x轴为迭代次数的图,在梯度下降的迭代次数上绘制成本函数J(θ)。如果J(θ)增大,则可能需要减小α。

自动收敛测试:如果在一次迭代中J(θ)的减小量小于E,则声明收敛,其中E是一些小值,例如10^-3。但是实际上,很难选择此阈值。

4 多项高阶线性回归

当直线不能较好地对训练集拟合的时候,我们可以通过将其设为二次,三次或平方根函数(或任何其他形式)来更改假设函数的行为或曲线。

此时通常需要特征缩放。

虽然可能会有一些诱导去拟合更高阶的多项式以此来降低误差,但是这样容易发生过拟合。应该画出拟合曲线图形,重点放在确保曲线反映样本真实分布上。下图是一个例子,可以帮助我们理解。

尤其要注意曲线的两端,看看这些形状和趋势是否有意义。更高的多项式可以产生怪异的推断结果。

5 正规方程法

正规方程法是线性回归求解参数的另一种算法,实际上,这种方法就是对代价函数J直接求导,令求导结果等于0时的theta就是预测函数的参数。与梯度下降法各有优劣。

总的来说,梯度下降法适于特征值多的情况(10000以上),正规方程法适用于特征值少的情况。

首先,构造一个矩阵X,横向为特征值(在第一列前新增一列值都为1),纵向为样本,如下图:

只需计算

使用正规方程法时,由于XTX可能不可逆,所以在octave中应当使用pinv函数而不是inv函数,pinv函数可以在不可逆的情况下仍然给出一个值。

6 Matlab常用函数

% Matlab中索引从1开始
% 使用help命令查看函数/命令的帮助文档
1 ~= 2 % 逻辑判断,不相等

A = [1 2 3; 4 5 6; 7 8 9]; % 矩阵A的一行元素之间用逗号或空格分隔,一列元素之间用分号分隔。
B = eye(3); % 构造一个3*3单位矩阵
C = ones(3); % 构造一个3*3,元素全为1的矩阵
D = rand(3); % 构造一个3*3, 元素在0~1之间随机分布的矩阵
E = randn(3); % 构造一个3*3,元素在0~1之间正态分布的随机矩阵

size(A); % 返回矩阵A的行列数,ans = [3 3]

v = 1:2:6 % 构造一个从1开始,步距为2,不大于6的向量,v = [1 3 5]
length(v) % 返回向量的长度,ans = 3
length(A) % 返回矩阵A的行数, ans = 3

load(abc.dat); % 导入dat文件
who; % 显示工作空间中储存的所有变量
clear % 清除一个变量
save [文件名] [变量名]; % 保存为文件(当有任何输入(例如 filename)为变量或字符串时,请使用函数格式)

A(3,2); % 指向矩阵A第三行第二列的值
A(2,:); % 指向第二行(向量)
A(2,:)=[1;2;3]; % 将[1;2;3]赋值给矩阵A的第二列 
A=[A, [2; 3; 4]]; % 在A后面新添一列

v = A(: );  % 将矩阵A中的所有元素放进一个列向量中
reshape(v, [row], [col]); % 从向量还原回矩阵

% 矩阵运算
% .表示位运算
A .*B; % 表示A和B中对应位置的元素相乘
A.^2; % 表示A中各元素平方
1./A; % 表示A中各元素倒数
A ~= B; % 是对两个矩阵中对应位置的元素一一判断
log(A); % 得到A中各元素取对数
exp(A); % 得到A中各元素以e为底的指数
abs(A); % 得到各元素绝对值
A’; % 得到转置矩阵
val =max(v); % 得到向量v中的最大值
[val, ind]=max(v); 得到最大值和位置
max(A); % 得到的是矩阵每一列中的最大值
v>3; % 得到一个0/1向量
find(v>3); % 得到大于3的元素的位置
[r, c]=find(A>3); % r得到每行的find(i>3),c得到每列的find(j>3)
sum(v); % 得到元素和
prod(v); % 得到元素积
floor(v); % 得到元素取整(之间去掉小数)
ceil(v); % 四舍五入取整
max(A,B); % 得到一个矩阵,其中的元素为A,B对应位置的最大值

max(A,[],1); % 得到一个元素为 [A的列向量中最大值] 的行向量
max(A,[],2); % 得到一个元素为 [A的行向量中最大值] 的列向量
% max(A)默认等同于max(A,[],1),所以max(max(A))可以得到矩阵A中的最大值(也可以用max(A(: ))),这里注意max()中第三个参数,1表示对列向量进行操作,2表示对行向量进行操作
sum(A, 1); % 表示列向量相加,得到一个行向量
sum(A, 2); % 表示行向量相加,得到一个列向量,且默认sum(A)等同于sum(A,1)

inv(A); % 取逆
pinv(A); % 取逆,能处理奇异矩阵。

% 作图
plot(x, y); % x为横轴序列,y为纵轴序列
hold on; % 该命令可以让作出的图保留,使得接下来在上一张图上继续画
xlable('x轴'), ylable('y轴'); % 添加横纵轴名称
legend('图例'); % 添加图例
title('图名'); % 添加图表名称
cd \\C:\Users\q1597\Desktop; print -dpng ‘myPlot.png’; % 保存图表

figure(1); plot(t, y1);
figure(2); plot(t, y2); % 这样就有两个图同时存在
subplot(1,2,1); % 表示生成一张1行2列的画布,并在第一个位置作图
axis(); % 指定当前坐标区的范围
clf; % 命令清空
imagesc(A); % 根据矩阵A的元素作色彩矩阵图
colorbar; % 命令显示色彩图例
colormap gray; % 命令使它变为灰阶图

%用逗号或分号分隔同一行多个命令,区别是逗号不会把运行结果打印出来


for i = 1:10,
    v(i)=2^i; % 这里前面的空格并无实际意义
end;

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据