Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

本文主要是介绍Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此系列为 Coursera 网站机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning
参考资料:http://blog.csdn.net/SCUT_Arucee/article/details/49448111
     http://blog.csdn.net/sinat_30071459/article/details/50721565


一、多元线性回归(Multivariate Linear Regression)

1.1 多元线性回归

在之前的房价预测问题上,我们只考虑了房间面积这一个变量(特征)来预测房屋价格,但是当我们使用房屋面积 x1 ,房间数量 x2 ,楼层 x3 ,使用年限 x4 多个变量来预测房屋价格时,问题就由单变量问题转化为多变量(特征)问题。
我们首先定义几个符号方便之后的讲解:

          n 特征的个数(此例中 n=4
          x(i) i 组训练数据的所有特征,每组特征可用一个列向量表示。
x(i)j i 组训练数据的第j个特征的值

此时,我们的假设函数为: hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4 ,我们可以假设 x0=1
扩展到 n 个变量,得到多变量线性回归一般的假设函数(hypothesis):

hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θnxn

定义两个 n+1 维向量:

x=x0x1x2xnRn+1

θ=θ0θ1θ2θnRn+1

假设函数可以表示为: hθ(x)=θTx

代价函数 J(θ0,θ1,,θn)=12mmi=1(hθ(x(i))y(i))2 也可以用上面定义的向量表示:

J(θ)=12mmi=1(hθ(x(i))y(i))2

也可以写为:

J(θ)=12mmi=1((nj=0θjx(i)j)y(i))2

1.2 用梯度下降解决多元线性回归问题

同前面的相同,梯度下降更新公式为:

θ:=θjαθjJ(θ)

n 个特征:(x(i)0=1

也可以表示为:

同在前面提过的一样,这里之所以会多乘一项 x(i)j ,是因为 hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θnxn 在对 θj 求偏导时,会得到 θj 前面的系数 x(i)j


1.3 特征缩放(Feature Scaling)

处理多变量问题时,如果使不同的变量取值都在相似的范围内,那么梯度下降收敛的速度会加快。

下面我们将举例说明为什么以及如何处理。

我们假设上述房价问题中房屋面积大小 x1 取值范围为 02000 ,房间数量 x2 取值为 15 ,如果我们画出 J(θ) 的轮廓图(contours)会发现 x1 x2 取值差别很大,与 θ2 相比, θ1 变化会很缓慢,画出来的轮廓图(contours)会很高很细。如下图:

在这种情况下,算法很难找到一条捷径快速找到最优解。为了解决这个问题,我们需要进行特征缩放(feature scaling),将特征变量值除以其可以取到的最大值:

x1=2000
x2=5

这样可确保让不同特征变量的取值在相近的范围内(具有可比性),轮廓图变得更圆,梯度下降算法收敛更快。
进行特征缩放时,通常让每一个特征取值大概在 1xi1 的范围,因为 x0 总是等于 1 ,它也满足这个范围。但这里的范围界限1 1 也不是绝对的,只要范围和此范围接近即可,例如0.5 0.5 ,但是最好不要取过大( 100 ),或过小( 0.0001 )。

均值归一化(mean normalization)
除了特征缩放(feature scaling),有时还可以进行均值归一化(mean normalization),使特征值的均值近似于0。
即:

xi:=xiμisi

μi 是训练数据集中 xi 的平均值, si xi 的取值范围( max(xi)min(xi) ),或者 si xi 的标准差。( x0 不进行上述操作)。

均值归一化不需要太精确(即到底取标准差还是取值范围或者纠结于取某个固定值),其目的只是为了让梯度下降算法收敛速度更快。


1.4 梯度下降的两个问题

梯度下降有两个常见的问题:

  • 如何确定梯度下降是正常工作的
  • 如何选择学习率

Debugging gradient descent
对于梯度下降,我们的目的是 minθJ(θ) 。因此,我们可以在梯度下降算法运行的过程中,画出 J(θ) 随迭代次数增加而变化的曲线图。正常情况下,每一次迭代后,代价函数 J(θ) 都减小了。如下图,若 J(θ) 在一定的迭代次数后趋于平坦了,则认为梯度下降收敛了。

在这里,我想先区分一下几个在后面的学习中容易混乱的概念:

batchsize: 批大小,在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
iteration: 1个iteration等于使用batchsize个样本训练一次;
epoch: 1个epoch等于使用训练集中的全部样本训练一次;

需要注意的是,对于不同的问题,梯度下降收敛所需的迭代次数也不同。我们很难确定地说出在第几次迭代算法收敛,因此,我们常常需要 J(θ) 随迭代次数变化的曲线图帮忙判断。

自动收敛测试(Automatic convergence test)
除了可以根据如上所述的 J(θ) 随迭代次数变化曲线判断是否收敛外,还可以进行自动收敛测试,即给定一个合适的较小值 ε ,例如 103 ,如果在一次迭代后 J(θ) 减小到小于 ε ,则认为梯度下降收敛了。
如果选择的学习率 α 足够小,那么每一次迭代, J(θ) 都会减小。

但这里的 ε 怎样选取合适并不好定一个规则,故通过判断曲线图是否平坦检测算法是否收敛可能更好。

同时, J(θ) 曲线图可以在梯度下降没有正常工作的时候给出我们警告:

如上图,如果 J(θ) 曲线图出现左上现象,是因为学习率 α 太大,每次迭代后 J(θ) 都冲过了最小值,反而变得更大(如右侧所示),这提示我们要用更小的 α

如果 J(θ) 曲线图出现左下现象,也是因为学习率 α 较大,导致 J(θ) 可能不会每次迭代都减小,也提示要用更小的 α

总结:

  • α 太小,则收敛太慢;
  • α 太大,则 J(θ) 可能不会每次迭代都减小,可能无法收敛。

实际上,应该尝试一系列的 α 值(例如: ,0.001,0.003,0.01,0.03,0.1,0.3,1, ),作出 J(θ) 随迭代次数变化的曲线,找到一个可以使梯度下降较快收敛的学习率 α 的值。


1.5 特征选择与多项式回归

特征选择
我们现在已经了解了多变量线性回归,接下来会了解到如何选择特征和如何得到不同的算法。当我们选择了合适的特征,算法会变得非常有效。

仍然以房价问题为例,假设房价受街道临宽(frontage)和纵向深度(depth)共同影响,则假设函数为:

hθ(x)=θ0+θ1×frontage+θ2×depth

实际上,我们用房屋的面积来预测房价更合适,因此我们可以定义新的特征: x=frontage×depth ,线性回归假设函数为: hθ(x)=θ0+θ1×x ,有时候通过新的特征,会得到一个更好的模型。

多项式回归(Polynomial Regression)
多项式回归可以帮助我们利用线性回归的方法拟合非常复杂的函数,甚至是非线性函数。

假设房价只与房屋面积大小有关,我们得到的数据集如下图所示:

我们可以有很多模型可供选择来拟合这些数据。我们可以看出,直线(线性回归)无法很好地拟合这些数据,所以,我们可以如下图右上的二次函数来拟合,但二次函数上升到顶点会下降(如下图蓝线所示),而我们不认为房价会随面积的增加而降低,所以选择右下的三次函数来拟合可能更为合适(如下图绿线所示)。

此时,

hθ(x)=θ0+θ1x+θ2x2+θ3x3

联想到之前的多变量线性回归:

hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3

我们可以通过设置特征变量:( size=x

x1=(size)
x2=(size)2
x3=(size)3

将多项式回归和多变量线性回归联系起来。

需要注意的是,如果房屋的大小取值范围是: 01000 ,我们新设置的特征变量取值范围就变成了:

x01000
x2=0106
x3=0109

不同的特征变量取值范围差异会变得非常大,这时,我们就需要进行前面所说的归一化过程,才能将这些变量的值变得具有可比性。

在上述例子中,除了选择三次函数模型,我们还有其他合理的选择,例如平方根函数:

hθ(x)=θ0+θ1x1+θ2x1

只要能够通过设计不同的特征,取得更好的拟合效果就行。在之后的学习中我们会介绍一些算法可以帮助你自动选择合理有效的特征。


二、正规方程(Normal Equation)

2.1 正规方程(Normal Equation)

在之前所讲的梯度下降算法中,我们通过多次迭代来计算梯度下降,而正规方程提供了一种可以一次性求解最优 θ 值的解析方法。

首先我们回忆一下微积分是怎样处理最小值问题 minθJ(θ) 的:

1、 θR ,假设 J(θ)=aθ2+bθ+c ,要取得 J(θ) 的最小值,

ddθJ(θ)=0 ,解出 θ 的值

2、 θRn+1 J(θ)=12mmi=1(hθ(x(i))y(i))2 ,要取得最小值,对每一个参数 θj

θjJ(θ)=0 ,解出 θ0,θ1,,θn 的值

然而,这种计算很复杂。下面我们会介绍一种新的方法。
举一个例子,如下图:

我们可以在数据前面补一列 x0

接下来,我们要对特征变量 x ,建立一个矩阵X XRm×(n+1) ,这个矩阵包含了训练样本所有的特征变量。 X 也称为设计矩阵(design matrix)。

其中,m为样本数量, n 为特征变量数,n+1是因为加了 x0 这一列。

y 进行同样的操作,建立向量y yRm

利用刚刚创建的 X y正规方程(Normal Equation)给出求解 minθJ(θ) 的公式是:

θ=(XTX)1XTy

使用正规方程法时不需要归一化特征变量。

正规方程与梯度下降的对比

对比梯度下降法和正规方程法求解 θ ,梯度下降法的劣势是需要选择学习率 α ,需要多次迭代,而正规方程法不需要。但这不意味着正规方程法就优于梯度下降,正规方程法需要计算 (XTX)1 ,当特征变量的数目 n 很大时,(XTX)1 (n+1)×(n+1) 维矩阵,对该矩阵求逆计算量巨大,复杂度大致是 O(n3) ,此时用梯度下降发反而更合适。

通常, n 10000以下时,正规方程法会是一个很好的选择,而当 n>10000 时,多考虑用梯度下降法。


2.2 Normal Equation Noninvertibility

在选择正规方程法的时候,我们往往会遇到下面两个问题:

  • 如果 (XTX)1 不可逆怎么办?
    首先,这种情况并不多见;其次,Andrew Ng教授强调了Octave里的pinv()伪逆函数依旧可以求解。

  • 为什么 (XTX)1 会不可逆?
    (联系线性代数的知识)
    ① 存在多余的特征,即存在特征变量之间是线性相关的。
    针对这种情况,可删除一些特征变量直至特征变量之间没有互相线性相关的特征存在。
    ② 特征变量太多(e.g. mn )
    针对这种情况,可删除一些特征变量或使用正则化(regularization)的方法使得即使只有很小的训练集( m 很小),也能找到适合很多特征的θ值,后面我们会介绍正则化(regularization)。

附:课后测试题答案

答案:C

这篇关于Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664306

相关文章

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学