1. 多变量线性回归(Linear Regression with Multiple Variables)

也称为多元线性回归,一元就是一个变量,多元就是多个变量,在这里也可以叫做多个特征

1.1 多维特征(Multiple Features)

之前,我们讨论过单变量/特征的回归模型,但是单变量并不足以精确地预测房价,因此,我们需要对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型。

现在需要引入新的注释来建立和解释新的模型↓

符号 意义
i 特征矩阵中的第 i 行
j 特征矩阵中第 i 行的第 j 个特征
m 训练样本的数量
n 特征的数量

在我们引入了新的特征之后,原来的那一条公式失去了作用,取而代之的是一条新的公式

多变量线性回归方程:

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ​(x)=θ0​+θ1​x1​+θ2​x2​+...+θn​xn​

2. 多变量梯度下降(Gradient Descent for Multiple Variables)

2.1 代价函数

J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1...\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0​,θ1​...θn​)=2m1​i=1∑m​(hθ​(x(i))−y(i))2

2.2 批量梯度下降算法

原公式:
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj​:=θj​−α∂θj​∂​J(θ0​,θ1​)

经过修改,得到现在的公式:
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 . . . θ n ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1...\theta_n) θj​:=θj​−α∂θj​∂​J(θ0​,θ1​...θn​)

代入多变量回归公式,得:
θ j : = θ j − α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 θj​:=θj​−α∂θj​∂​2m1​i=1∑m​(hθ​(x(i))−y(i))2

求导后得到批量梯度下降算法
θ j : = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}((h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj​:=θj​−αm1​i=1∑m​((hθ​(x(i))−y(i))xj(i)​

2.3 梯度下降法实践 1-特征缩放(Feature Scaling)

在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

在以下图像中,我们就可以发现,图片非常地椭圆,这种椭圆使得我们在梯度下降的时候需要非常多次的迭代才能收敛。

因此我们需要特征缩放去解决这个问题,它将所有的特征尺度都尽量缩放到-1到1之间,太大或者太小都不好,如下图

2.3.1 特征均值归一化(mean normalization):

x i = x i − μ i s i x_i = \frac{x_i-\mu_i}{s_i} xi​=si​xi​−μi​​

符号 含义 计算方法 python(matlab)函数 参数解释
x_i 特征
μ_i 平均值 同一个x_n相加求再除以同一个x_n的数量 python:mean(x,axis=0) matlab:mean(x) x:数据集,axit:轴,为0计算每一列,为1计算每一行
s_i 标准差 ,也可以简单的使用最大值减去最小值 std(x) 方法同上

2.4 梯度下降法实践 2-设置梯度下降法迭代次数(Debugging)

代价函数会随着迭代次数的下降而收敛,不同的迭代算法需要不同的迭代次数,有的可能需要30次,而有的可能则需要300万次

我们要判断代价函数是否收敛有两个方法

  1. 看代价函数的曲线变化
  2. 自动收敛测试

当下降幅度少于一个θ值的时候(θ值自己取),则可以看作代价函数收敛

但是一般而言,θ值是比较难确定的,最好还是自己通过图像去判断是否达到了收敛的程度

2.5 梯度下降法实践 3-学习率(Learning Rate)

2.5.1 学习率α过大

通常,随着迭代次数的增加,代价函数应该是逐步下降的,但是当你看到代价函数的值增加的时候,很可能学习率过大所导致的,学习率过大使得函数错过了最低点

2.5.2 学习率α过小

学习率过大会有问题,那么过小了,也会造成问题,如下图的蓝色画笔所画,当学习率过小,学习速度就会很慢,需要更多的迭代次数才能迭代到最低点

2.5.3 如何选取学习率

在选取学习率的时候,我们通常都需要设置多个学习率进行测试,学习率之间的倍数通常是3倍和10倍,通过测试,我们就可以找到最好的那一个学习率

3. 特征与多项式回归(Features and Polynomial Regression)

首先我们来举一个例子:房价预测

符号 含义
x1 frontage(临街宽度)
x2 depth(纵向宽度)
x area(面积)

由此,我们可以建立一个初步的模型

$
h_\theta(x)=\theta_0+\theta_1x
$
但是这个线性回归并不能很好的拟合我们的数据,因此我们需要一些改变(曲线)更好地拟合数据,比如一个二次方模型
$
h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2
$
如下图

但是我们发现,二次方模型依然不能很好地拟合数据,因为它会随着Size的增加而下降,房价可不会因为房子面积的增加而下降,因此,我们需要一个三次方模型:

h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3 hθ​(x)=θ0​+θ1​x+θ2​x2+θ3​x3

这样子,就可以比较好地拟合我们的数据

接下来,我们通过以下方法,将多项式回归转变为多元线性回归方程

h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) 2 + θ 3 ( s i z e ) 3 h_\theta(x)=\theta_0+\theta_1(size )+\theta_2(size)^2+\theta_3(size)^3 hθ​(x)=θ0​+θ1​(size)+θ2​(size)2+θ3​(size)3
x 1 = ( s i z e ) x_1=(size) x1​=(size)
x 2 = ( s i z e ) 2 x_2=(size)^2 x2​=(size)2
x 3 = ( s i z e ) 3 x_3=(size)^3 x3​=(size)3
= θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 =\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 =θ0​+θ1​x1​+θ2​x2​+θ3​x3​
这样子,就可以得到我们的多元线性回归方程

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 hθ​(x)=θ0​+θ1​x1​+θ2​x2​+θ3​x3​
由此我们就可以得到3个特征,在读者看来,这可能是更好地标记特征,size和size的平方不是同一样东西

接下来还没完,我们发现特征与特征之间相差非常大

这就可能出现之前说过的迭代问题,因此,我们需要对特征进行缩放,从而使得方程能得到更好更快地迭代

当然,条条大路通罗马,除了三次方模型外,我们还可以采用其他模型使得曲线更加拟合数据,比如平方根模型(紫色线)

h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) h_\theta(x)=\theta_0+\theta_1(size )+\theta_2\sqrt{(size)} hθ​(x)=θ0​+θ1​(size)+θ2​(size) ​

因此,我们需要深入了解数据和数据的本质,从而才能找到更好的模型去拟合数据

4. 正规方程(Normal Equation)

到目前为止,我们都在使用梯度下降算法求解最小值

但在某些问题上,用正规方程可以更快求解出最优值,通过正规方程可以一次性求到这一个值,那么什么是正规方程呢?

就拿上图的J(θ)函数来说,要求最优解,根据我们学过的微积分知识,对它进行一个直接求导就可以

∂ ∂ θ j J ( θ ) = 0 \frac{\partial}{\partial\theta_j}J(\theta)=0 ∂θj​∂​J(θ)=0

回到之前说的平方代价函数,对于这么一个函数,我们需要对它每一个变量都进行求偏导,得出每一个θ的值

因此,我们选择使用线性代数的方法进行批量求导,使用以下正规方程就能解出向量θ

θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy

完整推导过程:

http://blog.xiangjiang.live/derivations-of-the-normal-equation/

https://zhuanlan.zhihu.com/p/22757336

先来理解一下这个方程

首先,假设样本数为m,每个样本的期望值与实际值y相等

转化成向量表达的形式

Y = X ∗ θ Y=X*\theta Y=X∗θ
注:*符号是矩阵叉乘的意思

由于X不一定是方阵,所以X乘上X的逆不一定等于E(单位矩阵,就是对角线是1,其他为0的矩阵,单位矩阵肯定是一个方阵),因此X需要先乘上X的转置,使它变成一个方阵,由于一个方阵的逆乘一个方阵等于I(单位矩阵),所以就消去了,最后得到结果:

下面用数据来举一个例子

得到以下两个矩阵

运用正规方程方法求解,得

梯度下降与正规方程的比较:

梯度下降 正规方程
需要选择学习率 α 不需要
需要多次迭代 不需要迭代
当特征数量 n 大时也能较好适用 如果特征数量 n 较大则运算代价大,因为矩阵逆的计算时间复杂度为 O(n3),通常 来说当 n 小于 10000 时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数 θ 的替代方法。具体地说,只要特征变量数量小于一万,我们通常使用标准方程法,而不使用梯度下降法。随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用正规方程方法。

4.1 设计矩阵(design matrix)

统计学和机器学习中,设计矩阵是一组观测结果中的所有解释变量的值构成的矩阵,常用X表示。设计矩阵常用于一些统计模型,如一般线性模型,方差分析中。

4.2 矩阵X’X是奇异矩阵

原因有两个:

  1. 有两个成一定比例的特征值,使得矩阵不可逆
  2. 当训练样本比参数少很多的时候,可能会导致矩阵结果不可逆

解决方案:

  1. 查看特征里面是否有些重复或者多余的特征,比如呈线性相关的特征,删除重复两个重复特征中的其中一个
  2. 看特征值中是否有多余的特征,直到删到不再多余为止,如果实在太多,需要考虑使用正则化方法

如果矩阵 X T X X^TX XTX 是不可逆的,(通常来说,不会出现这种情况),如果在 Octave 里,可以用伪逆函数pinv()来实现。这种使用不同的线性代数库的方法被称为伪逆。即使X’X的结果是不可逆的,但算法执行的流程是正确的。总之,出现不可逆矩阵的情况极少发生,所以 在大多数实现线性回归中,出现不可逆的问题不应该过的关注 X T X X^TX XTX 是不可逆的。

吴恩达机器学习课程笔记——第二周相关推荐

  1. 吴恩达机器学习课程笔记——第一周

    1. 单变量线性回归(Linear Regression with One Variable) 1.1 模型表示 像上述公式,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题. 例子 ...

  2. 吴恩达机器学习课程(第一周)

    吴恩达机器学习课程(第一周) welcome Welcome to Machine learning!(video) 机器学习在各领域的应用很多 比如搜索引擎 图像识别 垃圾邮件处理 这是一门让计算机 ...

  3. 吴恩达机器学习课程笔记一

    吴恩达机器学习课程笔记 前言 监督学习---`Supervised learning` 无监督学习---`Unsupervised learning` 聚类 异常检测 降维 增强学习---`Reinf ...

  4. Github标星24300!吴恩达机器学习课程笔记.pdf

    个人认为:吴恩达老师的机器学习课程,是初学者入门机器学习的最好的课程!我们整理了笔记(336页),复现的Python代码等资源,文末提供下载. 课程简介 课程地址:https://www.course ...

  5. 【CV】吴恩达机器学习课程笔记第18章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 18 应用案例:照片OCR 18-1 问题描述与流程(pi ...

  6. 【CV】吴恩达机器学习课程笔记第17章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 17 大规模机器学习 17-1 学习大数据集 17-2 随 ...

  7. 吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)

    目录 1-1机器学习的相关名词 1-2 什么是机器学习? 1.definition 定义 2.主要的机器学习算法的分类 1-3有监督学习及常用算法 1.定义 2.两种数据类型补充:categorica ...

  8. 【CV】吴恩达机器学习课程笔记 | 第1-2章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 1 介绍 1-3 监督学习 1-4 无监督学习 2 单变量 ...

  9. 【CV】吴恩达机器学习课程笔记第16章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 16 推荐系统 16-1 问题规划 16-2 基于内容的推 ...

最新文章

  1. 全网刷爆!B站Up主何同学带火这只A股:最硬核桌子,苹果也做不到!
  2. python opencv旋转
  3. c++ _int64转字符串_C语言 仿JS的eval函数 解析字符串
  4. 机器学习笔记—再谈广义线性模型
  5. 大话手游时间服务器哪个最新,大话手游时间服和免费服优缺点分析!选择最适合你的...
  6. 382.链表随机节点
  7. python实时读取串口数据_串口的数据采集、以及数据的实时显示
  8. 如何显示或隐藏mac文件后缀名
  9. window7系统搭建FTP服务端,使用FileZilla FTP客户端测试
  10. 100层楼扔两个鸡蛋的问题
  11. springBoot简单使用SpringData的jdbc和简单使用durid
  12. ElasticSearch 数据迁移
  13. Android 使用 ksoap2-android调用Web Service学习
  14. android 2.2 sdk 源码,Ubuntu 10.10 编译Android2.2(froyo)源码 sdk adt
  15. 旷视2022:以产品之能加速行业发展,以生态之力开拓AIoT蓝海
  16. 计算机取证的相关案例,计算机取证实验报告(共9篇).doc
  17. 不一样的Python(10)——objects
  18. vlc推流的方法总结
  19. 中国电信计算机通信笔试题,中国电信入职考试题 求大神解答!
  20. vue中nextTick使用引起的一个小问题

热门文章

  1. Excel 中单元格和范围的引用(即访问的表示方法)
  2. 快速探索,音视频技术不再神秘
  3. 激励奖金到账扣税计算方法
  4. 新时达工业机器人技术储备_工业机器人选型注意事项
  5. 矩阵的幂运算--蓝桥杯
  6. 摄像机、镜头专业词汇详解
  7. flutter 输入框复制粘贴英文转中文
  8. 大咖论道,共建中国金融信创生态蓝图
  9. 程序员踩点下班,领导:不想干的请办理离职,我这里不养闲人与废物
  10. C++,ini文件操作(包含类)