《人工智能》机器学习
开发IDE:Anaconda3(python3.6.5)
回归是由达尔文(CharlesDarwin)的表兄弟FrancisGalton发明的。Galton于1877年完成了第一次回归预测,目的是根据上一代豌豆种子(双亲)的尺寸来预测下一代豌豆种子(孩子)的尺寸。Galton在大量对象上应用了回归分析,甚至包括人的身高。他注意到,如果双亲的高度比平均高度高,他们的子女也倾向于比平均高度高,但尚不及双亲。孩子的高度向着平均高度回退(回归)。Galton在多项研究上都注意到这个现象,所以尽管这个英文单词跟数值预测没有任何关系,但这种研究方法仍被称作回归。
那么什么是线性回归呢?在统计学中,线性回归(LinearRegression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是一次方)。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
我们和以前一样,还是结合实例来讲解吧。就以房价为例吧,这也是大家最熟悉,最关心得。
给定数据集D={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}D=lbrace(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)}) braceD={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},其中x(i)={x1(i),x2(i),...,xn(i)}x^{(i)}=lbracex_1^{(i)},x_2^{(i)},...,x_n^{(i)} bracex(i)={x1(i),x2(i),...,xn(i)},共有mmm个样本,每个样本含有nnn个特征。
现在我们有关于重庆洪崖洞附近房价的一些数据,D={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}D=lbrace(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)}) braceD={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},其中x(i)x^{(i)}x(i)只含有一个特征,表示房子的面积,i=1,2,...,mi=1,2,...,mi=1,2,...,m表示是第iii个训练样本,y(i)y^{(i)}y(i)是数值,表示房子的价格。我们将该数值绘制成下图。
图1
通过观察我们大致可以看出,房子的面积与房子的价格具有一定的线性关系,也就是说,我们可以画出能够大致表示与关系的一条直线,如下图:
图2
在该直线中,房子的面积为x(i)x^{(i)}x(i)自变量,房子的价格y^(i)hat{y}^{(i)}y^(i)为因变量。而“线性回归”的目的就是,利用自变量x(i)x^{(i)}x(i)与因变量y^(i)hat{y}^{(i)}y^(i),来学习出这么一条能够描述两者之间关系的线。对于一元线性回归来说就是学习出一条直线,而对于多元线性回归来说则是学习出一个面或超平面。
对于上述的例子,我们可以得到一个函数关系,y=mx+cy=mx+cy=mx+c。为了解决一般问题,我们就需要将线性回归的问题进行一般化、抽象化,转换成我们能够求解的数学问题。
5.1一元线性模型在上面的例子中,我们可以看出自变量x(i)x^{(i)}x(i)**与因变量y^(i)hat{y}^{(i)}y^(i)大致成线性关系,因此我们可以对因变量做如下假设(hypothesis):
y^(i)=θ1x(i)+θ0hat{y}^{(i)}= heta_1x^{(i)}+ heta_0y^(i)=θ1x(i)+θ0
或者
hθ(x(i))=θ1x(i)+θ0h_{ heta}(x^{(i)})= heta_1x^{(i)}+ heta_0hθ(x(i))=θ1x(i)+θ0
其中i=1,2,...,mi=1,2,...,mi=1,2,...,m在这里使用y^(i)hat{y}^{(i)}y^(i)是由于通过观察,我们可以发现直线并没有完全拟合数据,而是存在一定的误差。该假设即为一元线性函数的模型函数,其中含有两个参数θ0 heta_0θ0与θ1 heta_1θ1。其中θ1 heta_1θ1可视为斜率,θ0 heta_0θ0为则直线在yyy轴上的截距。接下来的任务就是如何求得这两个未知参数。
5.1.1损失函数模型建立好了,那么怎样的模型才是适合数据集放入呢?衡量一个模型和与数据点之间的接近程度,我们使用平方差来衡量。对于x(i)x^{(i)}x(i)其对应的直线上的值为y^(i)hat{y}^{(i)}y^(i),但所给的数据集中x(i)x^{(i)}x(i)对应的值为y(i)y^{(i)}y(i)。而预测值y^(i)hat{y}^{(i)}y^(i)与实际值y(i)y^{(i)}y(i)存在误差(或者也叫做残差(residual),在机器学习中也被称为代价(cost))。我们可以认为,预测值与实际值的误差越小越好。
在这里我们使用均方误差(MeanSquaredError)来描述所需要求解的目标函数(Objectivefunction)或代价函数(Lossfunction):
J(θ0,θ1)=12m∑i=1m(y^(i)−y(i))2=12m∑i=1m(hθ(x(i))−y(i))2color{red}J( heta_0, heta_1)=frac{1}{2m}sum_{i=1}^m(hat{y}^{(i)}-y^{(i)})^2=frac{1}{2m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})^2J(θ0,θ1)=2m1∑i=1m(y^(i)−y(i))2=2m1∑i=1m(hθ(x(i))−y(i))2
其中i=1,2,...,mi=1,2,...,mi=1,2,...,m目标函数J(θ0,θ1)J( heta_0, heta_1)J(θ0,θ1)描述了所有训练样本实际值与预测值之间的均方误差,而我们的目的就是求解能够使得该误差J(θ0,θ1)J( heta_0, heta_1)J(θ0,θ1)值最小的参数θ0,θ1 heta_0, heta_1θ0,θ1。可将其表示为:
minθ0,θ1J(θ0,θ1)min_{ heta0, heta1}J( heta_0, heta_1)minθ0,θ1J(θ0,θ1)
在确定了代价函数以及所需要求解的目标(θ0,θ1)( heta_0, heta_1)(θ0,θ1)以及条件minJ(θ0,θ1)minJ( heta_0, heta_1)minJ(θ0,θ1)之后,接下来需要使用优化算法来进行参数的求解了。
在这里我们将使用三种方法进行参数的求解:(1)最小二乘法,(2)最大似然法(3)梯度下降法。我们先观察一下目标函数:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2=12m∑i=1m[(θ1x(i)+θ0)−y(i))]2color{red}J( heta_0, heta_1)=frac{1}{2m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})^2=frac{1}{2m}sum_{i=1}^m[( heta_1x^{(i)}+ heta_0)-y^{(i)})]^2J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2=2m1∑i=1m[(θ1x(i)+θ0)−y(i))]2
此时将参数θ1 heta_1θ1视作自变量,可将上式看成是J(θ0,θ1)J( heta_0, heta_1)J(θ0,θ1)是关于θ1 heta_1θ1的二次函数并可作出下图(θ0 heta_0θ0亦同)。
图3
可看出函数图中存在最小点,而在该点处满足ΔJ(θ0,θ1)Δθ1=0frac{DeltaJ( heta_0, heta_1)}{Delta heta_1}=0Δθ1ΔJ(θ0,θ1)=0。此点即为最小值点。
5.1.2最小二乘法最小二乘法,或者叫正规方程,是解析地求解参数θ hetaθ。下面我们来介绍一下如何使用最小二乘法来求得参数。
对上述的目标函数进一步计算:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2=12m∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))+θ02−2θ0y(i)+(y(i))2]color{red}J( heta_0, heta_1)=frac{1}{2m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})^2=frac{1}{2m}sum_{i=1}^m[( heta_1x^{(i)})^2+2 heta_1x^{(i)}( heta_0-y^{(i)})+ heta_0^2-2 heta_0y^{(i)}+(y^{(i)})^2]J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2=2m1∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))+θ02−2θ0y(i)+(y(i))2](1)
求偏导
对损失函数求导,对上式θ1 heta_1θ1的求导,可以去掉不包含θ1 heta_1θ1的项,去掉后得到:
12m∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))]frac{1}{2m}sum_{i=1}^m[( heta_1x^{(i)})^2+2 heta_1x^{(i)}( heta_0-y^{(i)})]2m1∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))]
重新排列得到:
θ1212m(∑i=1m(x(i))2)+θ1m(∑i=1mx(i)(θ0−y(i))) heta_1^2frac{1}{2m}(sum_{i=1}^m(x^{(i)})^2)+frac{ heta_1}{m}(sum_{i=1}^mx^{(i)}( heta_0-y^{(i)}))θ122m1(∑i=1m(x(i))2)+mθ1(∑i=1mx(i)(θ0−y(i)))
关于θ1 heta_1θ1求导得到:
ΔJ(θ0,θ1)Δθ1=θ1m(∑i=1m(x(i))2)+θ1m(∑i=1mx(i)(θ0−y(i)))color{red}frac{DeltaJ( heta_0, heta_1)}{Delta heta_1}=frac{ heta_1}{m}(sum_{i=1}^m(x^{(i)})^2)+frac{ heta_1}{m}(sum_{i=1}^mx^{(i)}( heta_0-y^{(i)}))Δθ1ΔJ(θ0,θ1)=mθ1(∑i=1m(x(i))2)+mθ1(∑i=1mx(i)(θ0−y(i)))(2)
同样对θ0 heta_0θ0做相同的操作,去掉不含θ0 heta_0θ0的项,得到:
12m∑i=1m[2θ1x(i)θ0+θ02−2θ0y(i)]frac{1}{2m}sum_{i=1}^m[2 heta_1x^{(i)} heta_0+ heta_0^2-2 heta_0y^{(i)}]2m1∑i=1m[2θ1x(i)θ0+θ02−2θ0y(i)]
重新排列得到:
θ022+θ0θ1m(∑i=1mx(i))−θ0m(∑i=1my(i))frac{ heta_0^2}{2}+frac{ heta_0 heta_1}{m}(sum_{i=1}^mx^{(i)})-frac{ heta_0}{m}(sum_{i=1}^{m}y^{(i)})2θ02+mθ0θ1(∑i=1mx(i))−mθ0(∑i=1my(i))
其中sumi=1mθ02=mθ02sum_{i=1}^{m} heta_0^2=m heta_0^2sumi=1mθ02=mθ02。
关于θ0 heta_0θ0求导得到:
ΔJ(θ0,θ1)Δθ0=θ0+θ1m(∑i=1mx(i))−1m(∑i=1my(i))color{red}frac{DeltaJ( heta_0, heta_1)}{Delta heta_0}= heta_0+frac{ heta_1}{m}(sum_{i=1}^mx^{(i)})-frac{1}{m}(sum_{i=1}^{m}y^{(i)})Δθ0ΔJ(θ0,θ1)=θ0+mθ1(∑i=1mx(i))−m1(∑i=1my(i))(3)
导数等于0
前文我们对θ0 heta_0θ0、θ1 heta_1θ1已经求了偏导,接下来将(3)式等于0,并对θ0 heta_0θ0进行求解。
θ0+θ1m(∑i=1mx(i))−1m(∑i=1my(i))=0 heta_0+frac{ heta_1}{m}(sum_{i=1}^mx^{(i)})-frac{1}{m}(sum_{i=1}^{m}y^{(i)})=0θ0+mθ1(∑i=1mx(i))−m1(∑i=1my(i))=0
即
θ0=1m(∑i=1my(i))−θ1m(∑i=1mx(i)) heta_0=frac{1}{m}(sum_{i=1}^{m}y^{(i)})-frac{ heta_1}{m}(sum_{i=1}^mx^{(i)})θ0=m1(∑i=1my(i))−mθ1(∑i=1mx(i))
将y(i)ˉ=1m(∑i=1my(i))ar{y^{(i)}}=frac{1}{m}(sum_{i=1}^{m}y^{(i)})y(i)ˉ=m1(∑i=1my(i)),x(i)ˉ=1m(∑i=1mx(i))ar{x^{(i)}}=frac{1}{m}(sum_{i=1}^mx^{(i)})x(i)ˉ=m1(∑i=1mx(i)),则可以重写。
θ0^=y(i)ˉ−θ1x(i)ˉhat{ heta_0}=ar{y^{(i)}}- heta_1ar{x^{(i)}}θ0^=y(i)ˉ−θ1x(i)ˉ
我们可以发现y(i)ˉ=θ1x(i)ˉ+θ0^ar{y^{(i)}}= heta_1ar{x^{(i)}}+hat{ heta_0}y(i)ˉ=θ1x(i)ˉ+θ0^,这里x(i)x^{(i)}x(i)和y(i)y^{(i)}y(i)的变成了x(i)x^{(i)}x(i)和y(i)y^{(i)}y(i)平均值。我们这里需要求解,因此需要检验2阶导数。对θ0 heta_0θ0和θ1 heta_1θ1求2阶导数。
Δ2J(θ0,θ1)Δθ12=1m(∑i=1m(x(i))2)frac{Delta^2J( heta_0, heta_1)}{Delta heta_1^2}=frac{1}{m}(sum_{i=1}^m(x^{(i)})^2)Δθ12Δ2J(θ0,θ1)=m1(∑i=1m(x(i))2)
Δ2J(θ0,θ1)Δθ02=1frac{Delta^2J( heta_0, heta_1)}{Delta heta_0^2}=1Δθ02Δ2J(θ0,θ1)=1
这两个量一定是正量,说明它仅有一个拐点且对应的拐点对应于损失函数的最小值。
将θ0^=y(i)ˉ−θ1x(i)ˉhat{ heta_0}=ar{y^{(i)}}- heta_1ar{x^{(i)}}θ0^=y(i)ˉ−θ1x(i)ˉ代入(2)中,得到仅含有θ1 heta_1θ1的表达式:
ΔJ(θ0,θ1)Δθ1=θ1m(∑i=1m(x(i))2)+1m(∑i=1mx(i)(y(i)ˉ−θ1x(i)ˉ−y(i)))color{red}frac{DeltaJ( heta_0, heta_1)}{Delta heta_1}=frac{ heta_1}{m}(sum_{i=1}^m(x^{(i)})^2)+frac{1}{m}(sum_{i=1}^mx^{(i)}(ar{y^{(i)}}- heta_1ar{x^{(i)}}-y^{(i)}))Δθ1ΔJ(θ0,θ1)=mθ1(∑i=1m(x(i))2)+m1(∑i=1mx(i)(y(i)ˉ−θ1x(i)ˉ−y(i)))
使用x(i)ˉ=1m(∑i=1mx(i))ar{x^{(i)}}=frac{1}{m}(sum_{i=1}^mx^{(i)})x(i)ˉ=m1(∑i=1mx(i))简化表达式:
ΔJ(θ0,θ1)Δθ1=θ1[1m(∑i=1m(x(i))2)−x(i)ˉx(i)ˉ]+y(i)ˉx(i)ˉ−1m(∑i=1mx(i)y(i))color{red}frac{DeltaJ( heta_0, heta_1)}{Delta heta_1}= heta_1[frac{1}{m}(sum_{i=1}^m(x^{(i)})^2)-ar{x^{(i)}}ar{x^{(i)}}]+ar{y^{(i)}}ar{x^{(i)}}-frac{1}{m}(sum_{i=1}^mx^{(i)}y^{(i)})Δθ1ΔJ(θ0,θ1)=θ1[m1(∑i=1m(x(i))2)−x(i)ˉx(i)ˉ]+y(i)ˉx(i)ˉ−m1(∑i=1mx(i)y(i))
通过将其偏导设置为0,得到θ1 heta_1θ1:
θ1^=1m(∑i=1mx(i)y(i))−y(i)ˉx(i)ˉ1m(∑i=1m(x(i))2)−x(i)ˉx(i)ˉcolor{red}hat{ heta_1}=frac{frac{1}{m}(sum_{i=1}^mx^{(i)}y^{(i)})-ar{y^{(i)}}ar{x^{(i)}}}{frac{1}{m}(sum_{i=1}^m(x^{(i)})^2)-ar{x^{(i)}}ar{x^{(i)}}}θ1^=m1(∑i=1m(x(i))2)−x(i)ˉx(i)ˉm1(∑i=1mx(i)y(i))−y(i)ˉx(i)ˉ
接下来对上式进行简化,其中(x(i))2ˉ=1m(∑i=1m(x(i))2)ar{(x^{(i)})^2}=frac{1}{m}(sum_{i=1}^m(x^{(i)})^2)(x(i))2ˉ=m1(∑i=1m(x(i))2),x(i)y(i)ˉ=1m(∑i=1mx(i)y(i))ar{x^{(i)}y^{(i)}}=frac{1}{m}(sum_{i=1}^mx^{(i)}y^{(i)})x(i)y(i)ˉ=m1(∑i=1mx(i)y(i))。,从而:
θ1^=x(i)y(i)ˉ−y(i)ˉx(i)ˉ(x(i))2ˉ−x(i)ˉx(i)ˉcolor{red}hat{ heta_1}=frac{ar{x^{(i)}y^{(i)}}-ar{y^{(i)}}ar{x^{(i)}}}{ar{(x^{(i)})^2}-ar{x^{(i)}}ar{x^{(i)}}}θ1^=(x(i))2ˉ−x(i)ˉx(i)ˉx(i)y(i)ˉ−y(i)ˉx(i)ˉ
求得θ1 heta_1θ1,再带入θ0^=y(i)ˉ−θ1x(i)ˉhat{ heta_0}=ar{y^{(i)}}- heta_1ar{x^{(i)}}θ0^=y(i)ˉ−θ1x(i)ˉ,从而得到θ0 heta_0θ0。
以上就是使用最小二乘法求解参数。可不要以为就此结束了,我们的实例是对于一元线性回归,且是单一特征,那么对于更多的属性集合,更加高维的特征,那怎么处理呢?
我们接下来就要引入矩阵了,基础理论就不说了,接下来直接看如何使用矩阵如何求解一般过程。
矩阵一般化求解
为了便于理解,我们将先前的实例矩阵化,将θ0 heta_0θ0、θ1 heta_1θ1合并为一个矩阵向量,将每个x(i)x^{(i)}x(i)增加1,从而扩大成数据向量XXX,即:
对于模型函数,我们可以表示为:
h(x)=XTθ=θTXh(x)=X^T heta= heta^TXh(x)=XTθ=θTX
一般化,h(x)=XTθ=θXTh(x)=X^T heta= hetaX^Th(x)=XTθ=θXT可以表示为一般的线性回归模型,则代价函数我们可以表示为:
J(θ0,θ1)=12m∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))+θ02−2θ0y(i)+(y(i))2]=12m∣XTθ−Y∣T∣XTθ−Y∣color{red}J( heta_0, heta_1)=frac{1}{2m}sum_{i=1}^m[( heta_1x^{(i)})^2+2 heta_1x^{(i)}( heta_0-y^{(i)})+ heta_0^2-2 heta_0y^{(i)}+(y^{(i)})^2]=frac{1}{2m}|X^T heta-Y|^T|X^T heta-Y|J(θ0,θ1)=2m1∑i=1m[(θ1x(i))2+2θ1x(i)(θ0−y(i))+θ02−2θ0y(i)+(y(i))2]=2m1∣XTθ−Y∣T∣XTθ−Y∣
其中
Y=[y(1)y(2)y(3)⋮y(m)]Y=egin{bmatrix}y^{(1)}\y^{(2)}\y^{(3)}\vdots\y^{(m)}\end{bmatrix}Y=⎣⎢⎢⎢⎢⎢⎡y(1)y(2)y(3)⋮y(m)⎦⎥⎥⎥⎥⎥⎤
同样通过求导求解参数。即求解ΔΔθ[(XT⋅θ−y)T(XT⋅θ−y)]=0frac{Delta}{Delta heta}[(X^Tcdot heta-y)^T(X^Tcdot heta-y)]=0ΔθΔ[(XT⋅θ−y)T(XT⋅θ−y)]=0
而
ΔΔθ[(XT⋅θ−y)T(XT⋅θ−y)]=ΔΔθ[(θTXTXθ−2θTXTY−YTY)]frac{Delta}{Delta heta}[(X^Tcdot heta-y)^T(X^Tcdot heta-y)]=frac{Delta}{Delta heta}[({ heta}^TX^TX heta-2 heta^TX^TY-Y^TY)]ΔθΔ[(XT⋅θ−y)T(XT⋅θ−y)]=ΔθΔ[(θTXTXθ−2θTXTY−YTY)]
则
XTXθ−XTY=0X^TX heta-X^TY=0XTXθ−XTY=0
得到参数矩阵θ^=(XTX)−1XTYhat{ heta}=(X^TX)^{-1}X^TYθ^=(XTX)−1XTY。
以上便是使用最小二乘法进行参数求解的过程。另外一般来说,矩阵的逆运算算法复杂度为,当特征数很大时,计算非常耗时。
【注】以上步骤笔者只给出了关键步骤,有兴趣的朋请自行推导。
5.1.3最大似然法前文笔者使用最小二乘法进行了求解最优解,接下来,笔者就带领大家通过引入随机变量来显式地对数据中的噪声(模型和观测值和之间的误差)进行建模。同时也说明引入噪声的有事所在。
正如先前的例子,房价随着面积存在一定的线性关系,这个模型可以捕获数据的整体趋势,但是忽略了模型和观测数据之间出现的误差。我们可以发现误差也有所不同,有的是正的有是负的,也就是随机的,因此我们就引入随机变量来解决这个问题。关于随机变量的基础知识笔者就不再讲解了,忘记了或者没学过这部分的内容,可自行查阅相关资料吧。笔者直接进入该部分内容的正题了。
我们引入随机变量ε−avarepsilon-aε−a,现在我们的模型采用如下式子:
h(x)=XTθ+εh(x)=X^T heta+varepsilonh(x)=XTθ+ε
为了完整定义这个模型,我们需要定义εvarepsilonε的分布,我们假设是一个高斯或者正态分布,其均值为0,方差为σ2sigma^2σ2。
好了,现在万事具备,我们来构建模型,也就是联合概率密度分布:
接下来来就是求解参数了。带入高斯密度函数,引入自然对数值。
还是和以前一样通过求导,使其拐点为0来求解最优解。
【注】∂logL∂θfrac{partiallogL}{partial heta}∂θ∂logL是向量,因此需要采用矩阵形式,则
解其最优解,得到最优表达:
θ^=(XTX)−1XTYhat{ heta}=(X^TX)^{-1}X^TYθ^=(XTX)−1XTY
这就是最大似然解。
同样可以求出σ2sigma^2σ2。笔者就不在推导了,也是令导数为0,就直接给出最后解吧,。
5.1.4梯度下降法我们可以使用梯度下降法来求得该点的参数值。其思想为:“走一步看一步”,总是在每一步的小范围内找当前最优方向,再继续前进。
梯度下降法的逻辑为:
(1)从某个θ0,θ1 heta_0, heta_1θ0,θ1开始(一般设置为0或者取随机值)
(2)不断修改θ0,θ1 heta_0, heta_1θ0,θ1,以使得J(θ0,θ1)J( heta_0, heta_1)J(θ0,θ1)越来越小,直到接近最小值点。
其算法过程为:
repeat{
θj:=θj−αΔJ(θ0,θ1)Δθj heta_j:= heta_j-alphafrac{DeltaJ( heta_0, heta_1)}{Delta heta_j}θj:=θj−αΔθjΔJ(θ0,θ1)
}
其中αalphaα为学习率(learningrate),也就是每一次的“步长”;ΔJ(θ0,θ1)Δθjfrac{DeltaJ( heta_0, heta_1)}{Delta heta_j}ΔθjΔJ(θ0,θ1)是方向,也可以看做是二次函数上每一点的切线斜率,可以使得整体上是朝着最小值点的方向进行。参见下图进行理解:
图4
由上面的梯度下降算法过程可知,我们需要求解学习率αalphaα以及梯度ΔJ(θ0,θ1)Δθjfrac{DeltaJ( heta_0, heta_1)}{Delta heta_j}ΔθjΔJ(θ0,θ1),其中j=0,1j=0,1j=0,1。而学习率是人为设定,并不需要从训练集中学习,因此我们只需要求解梯度即可。
对于一元线性回归来说:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2=12m∑i=1m(θ0+θ1x(i)−y(i))2color{red}J( heta_0, heta_1)=frac{1}{2m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})^2=frac{1}{2m}sum_{i=1}^m( heta_0+ heta_1x^{(i)}-y^{(i)})^2J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2=2m1∑i=1m(θ0+θ1x(i)−y(i))2
则
ΔJ(θ0,θ1)Δθj=ΔΔθj12m∑i=1m(θ0+θ1x(i)−y(i))2frac{DeltaJ( heta_0, heta_1)}{Delta heta_j}=frac{Delta}{Delta heta_j}frac{1}{2m}sum_{i=1}^m( heta_0+ heta_1x^{(i)}-y^{(i)})^2ΔθjΔJ(θ0,θ1)=ΔθjΔ2m1∑i=1m(θ0+θ1x(i)−y(i))2
当j=0j=0j=0时:
ΔJ(θ0,θ1)Δθ0=1m∑i=1m(θ0+θ1x(i)−y(i))=1m∑i=1m(hθ(x(i))−y(i))frac{DeltaJ( heta_0, heta_1)}{Delta heta_0}=frac{1}{m}sum_{i=1}^m( heta_0+ heta_1x^{(i)}-y^{(i)})=frac{1}{m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})Δθ0ΔJ(θ0,θ1)=m1∑i=1m(θ0+θ1x(i)−y(i))=m1∑i=1m(hθ(x(i))−y(i))
当j=1j=1j=1时:
ΔJ(θ0,θ1)Δθ1=1m∑i=1m(θ0+θ1x(i)−y(i))⋅x(i)=1m∑i=1m(hθ(x(i))−y(i))⋅x(i)frac{DeltaJ( heta_0, heta_1)}{Delta heta_1}=frac{1}{m}sum_{i=1}^m( heta_0+ heta_1x^{(i)}-y^{(i)})cdotx^{(i)}=frac{1}{m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})cdotx^{(i)}Δθ1ΔJ(θ0,θ1)=m1∑i=1m(θ0+θ1x(i)−y(i))⋅x(i)=m1∑i=1m(hθ(x(i))−y(i))⋅x(i)
于是对于一元线性回归,梯度下降算法过程为:
repeat{
θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i)) heta_0:= heta_0-alphafrac{1}{m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))
θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i) heta_1:= heta_1-alphafrac{1}{m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})cdotx^{(i)}θ1:=θ1−αm1∑i=1m(hθ(x(i))−y(i))⋅x(i)
}
重复以上过程直到收敛,或达到最大迭代次数。收敛判断条件为:
∣J(θ0(k),θ1(k))−J(θ0(k−1),θ1(k−1))∣