Machine Learning - Coursera 吴恩达机器学习教程 Week2 学习笔记

这篇博客主要介绍了Coursera吴恩达机器学习课程的第二周内容,包括多维特征的线性回归、特征缩放与均值归一化、学习速率的影响、正则化以及正态方程。强调了特征预处理对模型收敛速度的重要性,并探讨了如何选择合适的学习速率。此外,还提及了在实际应用中如何处理XTX不可逆的情况和正则化的方法。
摘要由CSDN通过智能技术生成

多维特征(Multiple Features)

多元线性回归,即包含多个变量,比如房子的房龄、面积、房间数等,标记如下:
在这里插入图片描述
假设函数就变成了:
在这里插入图片描述
可以理解为:
θ0表示基础价格
θ1为每平方价格,X1为平米数
θ2为每层价格,X2为层数

假设函数简写为:
在这里插入图片描述
梯度下降就变成了:
在这里插入图片描述
左图是之前单变量时的梯度下降,右图是多变量的梯度下降,二者对比如下:
在这里插入图片描述

特征值预处理

当几个特征的量级相差过大时,会出现左图的情况,收敛路径复杂且缓慢;

最好将特征都缩放到接近[-1, 1],就能像右图一样收敛形成圆润的等高线,加快收敛,减少迭代次数。
在这里插入图片描述

可以使用以下两个技术。

特征缩放(Feature Scaling)

将特征值除以 Xmax - Xmin,得到新的取值范围在1以内的特征。

均值归一(mean normalization)

将xi 替换为xi - ui 来使均值接近0。

两个技术同时应用,即采用以下公式:
在这里插入图片描述
ui = mean(x)
si = xmax - xmin

学习速率——α

debug梯度学习

为了确保梯度下降正常工作,可以观察 迭代次数 - 代价函数 的图像:
在这里插入图片描述
当J(θ)减少量少于 10-3 时可视为收敛。

学习速率 α 的选取

如果α 太大,可能会出现左侧两图的情况,要么J持续变大,要么上下波动。

在这里插入图片描述
但若α 太小,会造成收敛速度过慢。所以可按照以下序列尝试:

α = 0.001,0.003,0.01, 0.03, 0.1, 0.3,1 …

一边画出如上J与iter的函数图,观察效果。

多项式回归

观察面积和价格的关系,假设函数不一定是线性的,也可以是多项式的:
在这里插入图片描述
如果选用上面的多项式函数,那么假设函数在x继续增大时会下降,这是不合理的。

此时可选用下面蓝框中的平方根函数(或者三次函数)。

注意,此时特征缩放就很重要了。x x2 x3的量级可能相差巨大。

正态方程(Normal Equation)

不同于梯度下降法,正态方程能用代数方法直接求解最佳的θ值

即分别令各个偏导为0,求解出θ值:
在这里插入图片描述
例如以下例子,可以构造出X和Y后,直接用下面红框里的公式计算出θ的值(具体为啥先不深究):
在这里插入图片描述
对比梯度下降法。

梯度下降:

  • 需要选择α
  • 需要多次迭代
  • 当n很大时效果良好,复杂度O(kn2

正态方程:

  • 无需选择α
  • 无需多次迭代
  • 当n很大时,XT X是一个n * n的矩阵,计算n * n矩阵转置复杂度为O(n3
  • 无法解决逻辑回归和分类等问题

当 n < 1000时(1000个特征以内),会优先使用正态方程。
在这里插入图片描述

正态方程中XTX不可逆的情况

  • 有多余特征,比如若x1 和 x2是线性相关的,那么XTX不可逆。
  • 过多特征,比如 m <= n,样本数小于特征数时,需要删除一些特征,或做正则化(regularization)

Matlab / Octave 常用操作

参考:https://codeantenna.com/a/mVcQGKR7LB#1_3

基础操作

计算数值
>> 5 + 6
ans = 11
>> 3 * 4
ans = 12
>> 1/3
ans = 0.3333
>> 2^6
ans = 64
计算逻辑值
>> 1 == 2
ans = 0
>> 1 ~= 2 
ans = 1
>> 1 && 0
ans = 0
>> 1 || 0
ans = 1
变量
>> a = 6
a = 6
>> a = 6;  %加上分号可以使变量不打印输出
>>
打印变量
>> a = pi;
>> a       
a = 3.1416
>> disp(a)       %仅输出a的值
    3.1416
>> disp(sprintf("2 decimals : %0.2f",a))  %打印字符串(用c语言的格式)
2 decimals : 3.14
>> 
建立矩阵和向量
>> A = [1 2;3 4;5 6]  %分号代表矩阵的换行
A =
     1     2
     3     4
     5     6
>> v = [1 2 3]     %表示行向量(1*3的矩阵)
v =
     1     2     3
>> v = [1;2;3]     %表示列向量(3*1的矩阵)
v =
     1
     2
     3
>> v = 1:0.1:2   %表示从1~2每隔0.1取数,得到的是一个行向量
v =
  181.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000
  9111.8000    1.9000    2.0000
>> v = 1:6       %当然也可以不取间隔
v =
     1     2     3     4     5     6
用特殊方法建立矩阵
>> ones(2,3)   %建立2*3的矩阵,元素全部为1
ans =
     1     1     1
     1     1     1
>> 2*ones(2,3)    %2*矩阵,元素全部为2
ans =
     2     2     2
     2     2     2
>> zeros(2,2)    %生成零矩阵
ans =
     0     0
     0     0
>> rand(1,3)    %生成0~1的随机矩阵
ans =
    0.8147    0.9058    0.1270
>> randn(1,3)   %生成高斯分布矩阵(正态分布)均值为0,标准差为1
ans =
    0.8622    0.3188   -1.3077
>> >> w = -6 + sqrt(10)*(randn(1,10000)); % 生成均值为-6,方差为1010000个数据的矩阵
>> hist(w)     %将这个矩阵用直方图的形式画出来
>> hist(w,50)  %50个竖条的直方图显示

在这里插入图片描述
在这里插入图片描述

>> eye(4)   %生成单位矩阵
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
>> eye(3)
ans =
     1     0     0
     0     1     0
     0     0     1

移动数据

矩阵的大小
>> A = [1 2;3 4;5 6]
A =
     1     2
     3     4
     5     6
>> size(A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值