线性回归(理论部分)

python代码实现:https://blog.csdn.net/jk_chen_acmer/article/details/102990950

线性回归

预测的答案值可以用各个特征值的线性表达式表示。

假设单个变量 x x x,实际答案为 y y y,线性预测值为 h θ ( x ) h_\theta(x) hθ(x) h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
数据集的数据个数为 m m m,称 x ( i ) x^{(i)} x(i)为第 i i i个数据的 x x x值, y ( i ) y^{(i)} y(i)同理。

对于一组 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,我们可以得到其代价函数为 J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2,也就是类似方差的东西,反应了预测值与实际答案的差距。

J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(θ0+θ1x(i)y(i))2,显然当 θ 0 \theta_0 θ0固定时, θ 1 \theta_1 θ1 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)的关系如图:
在这里插入图片描述
θ 0 \theta_0 θ0不固定时, θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)的关系如图(碗装图):
在这里插入图片描述
误差当然是越小越好,所以我们就是想办法在上述图像中找到一个最低点。

一般采用梯度下降法来得到最低点。

梯度下降算法

在这里插入图片描述
α \alpha α表示学习速率
ϑ ϑ θ j J ( θ 0 , θ 1 ) \dfrac{\vartheta}{\vartheta\theta_j}J(\theta_0,\theta_1) ϑθjϑJ(θ0,θ1)表示当前点的导数,也就是与图像相切的线的斜率。

对于一个n个特征值的问题,我们的代价函数和导数为:

J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x 1 ( i ) + . . . + θ n x n ( i ) − y ( i ) ) 2 ϑ ϑ θ j J ( θ 0 , θ 1 . . . θ n ) = 1 m ∑ i = 1 m ( θ 0 + θ 1 x 1 ( i ) + . . . + θ n x n ( i ) − y ( i ) ) ∗ x j ( i ) J(\theta_0,\theta_1...\theta_n)=\frac{1}{2m}\sum_{i=1}^m(\theta_0+\theta_1x_1^{(i)}+...+\theta_nx_n^{(i)}-y^{(i)})^2 \\ \dfrac{\vartheta}{\vartheta\theta_j}J(\theta_0,\theta_1...\theta_n)=\frac{1}{m}\sum_{i=1}^m(\theta_0+\theta_1x_1^{(i)}+...+\theta_nx_n^{(i)}-y^{(i)})*x_j^{(i)} J(θ0,θ1...θn)=2m1i=1m(θ0+θ1x1(i)+...+θnxn(i)y(i))2ϑθjϑJ(θ0,θ1...θn)=m1i=1m(θ0+θ1x1(i)+...+θnxn(i)y(i))xj(i)

梯度下降算法……α

每次另 θ j = θ j − α ϑ ϑ θ j J ( θ 0 , θ 1 ) \theta_j=\theta_j-\alpha\dfrac{\vartheta}{\vartheta\theta_j}J(\theta_0,\theta_1) θj=θjαϑθjϑJ(θ0,θ1),相当于往最低点走一步,这一步的长度与 α \alpha α直接相关。
在这里插入图片描述

梯度下降算法……特征缩放

当多个特征值的范围差异较大时,例如 x 1 ∈ [ 0 , 1 ] , x 2 ∈ [ 0 , 1000 ] x_1\in[0,1],x_2\in[0,1000] x1[0,1],x2[0,1000](在3D图像中的表现为扁平图像),每一步的斜率可能非常小,却又离最低点很远,需要非常大的迭代次数。这个时候我们可以对特征值进行缩放。

一般另 x = x − a v e r a g e r a n g e x=\dfrac{x-average}{range} x=rangexaverage
例如 x ∈ [ 0 , 1000 ] x\in[0,1000] x[0,1000],那么 600 : = ( 600 − 500 ) / 1000 = 0.1 600:=(600-500)/1000=0.1 600:=(600500)/1000=0.1,显然最后的范围为 [ − 0.5 , 0.5 ] [-0.5,0.5] [0.5,0.5]

梯度下降算法……构造新的特征

我们可以用已有的特征值通过方程式,构造出新的式子。例如我现在有 x 1 , x 2 x_1,x_2 x1,x2,可能最优预测函数 h θ ( θ 0 , θ 1 ) = θ 0 + θ 1 x 1 x 2 h_\theta(\theta_0,\theta_1)=\theta_0+\theta_1x_1x_2 hθ(θ0,θ1)=θ0+θ1x1x2,此时我们原来按照 θ 0 + θ 1 x 1 + θ 2 x 2 \theta_0+\theta_1x_1+\theta_2x_2 θ0+θ1x1+θ2x2构造就不太行了,但是如果我们令 x ′ = x 1 x 2 x'=x_1x_2 x=x1x2 h θ ( θ 0 , θ 1 ) = θ 0 + θ 1 x ′ h_\theta(\theta_0,\theta_1)=\theta_0+\theta_1x' hθ(θ0,θ1)=θ0+θ1x,就解决问题了。

以此方法,我们可以用线性回归处理非线性问题。

例如,最优预测函数为 h θ ( θ 0 , θ 1 , θ 2 , θ 3 ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h_\theta(\theta_0,\theta_1,\theta_2,\theta_3)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3 hθ(θ0,θ1,θ2,θ3)=θ0+θ1x+θ2x2+θ3x3,我们另 x 1 = x , x 2 = x 2 , x 3 = x 3 x_1=x,x_2=x^2,x_3=x^3 x1=x,x2=x2,x3=x3,则可以将预测函数写成 h θ ( θ 0 , θ 1 , θ 2 , θ 3 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_\theta(\theta_0,\theta_1,\theta_2,\theta_3)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 hθ(θ0,θ1,θ2,θ3)=θ0+θ1x1+θ2x2+θ3x3

注意,此时的 x i x_i xi的范围显然差距很大,那么特征缩放就更加重要了。

梯度下降算法……向量化计算

一般的编程语言带有或易获取线性代数库,实现速度快,所以一些计算我们可以使用矩阵运算来代替。

h θ ( θ 0 , θ 1 , θ 2 , θ 3 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 ⇒ [ θ 0 , θ 1 , θ 2 , θ 3 ] ∗ [ 1 , x 1 , x 2 , x 3 ] T h_\theta(\theta_0,\theta_1,\theta_2,\theta_3)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 \\ \Rightarrow[\theta_0,\theta_1,\theta_2,\theta_3]*[1,x_1,x_2,x_3]^T hθ(θ0,θ1,θ2,θ3)=θ0+θ1x1+θ2x2+θ3x3[θ0,θ1,θ2,θ3][1,x1,x2,x3]T

θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x 1 ( i ) + . . . + θ n x n ( i ) − y ( i ) ) ∗ x 0 ( i ) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x 1 ( i ) + . . . + θ n x n ( i ) − y ( i ) ) ∗ x 1 ( i ) θ n : = θ n − α 1 m ∑ i = 1 m ( θ 0 + θ 1 x 1 ( i ) + . . . + θ n x n ( i ) − y ( i ) ) ∗ x n ( i ) ⇒ [ θ 0 θ 1 . . . θ n ] − α 1 m ( θ 0 + θ 1 x 1 ( 1 ) + . . . + θ n x n ( 1 ) − y ( 1 ) ) [ x 0 ( 1 ) x 1 ( 1 ) . . . x n ( 1 ) ] . . . − α 1 m ( θ 0 + θ 1 x 1 ( m ) + . . . + θ n x n ( m ) − y ( m ) ) [ x 0 ( m ) x 1 ( m ) . . . x n ( m ) ] \theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(\theta_0+\theta_1x_1^{(i)}+...+\theta_nx_n^{(i)}-y^{(i)})*x_0^{(i)}\\ \theta_1:=\theta_1-\alpha\frac{1}{m}\sum_{i=1}^m(\theta_0+\theta_1x_1^{(i)}+...+\theta_nx_n^{(i)}-y^{(i)})*x_1^{(i)}\\ \theta_n:=\theta_n-\alpha\frac{1}{m}\sum_{i=1}^m(\theta_0+\theta_1x_1^{(i)}+...+\theta_nx_n^{(i)}-y^{(i)})*x_n^{(i)}\\ \\ \Rightarrow \begin{bmatrix}\theta_0\\\theta_1\\...\\\theta_n\end{bmatrix}-\alpha\frac{1}{m}(\theta_0+\theta_1x_1^{(1)}+...+\theta_nx_n^{(1)}-y^{(1)})\begin{bmatrix}x^{(1)}_0\\x^{(1)}_1\\...\\x^{(1)}_n\end{bmatrix}...-\alpha\frac{1}{m}(\theta_0+\theta_1x_1^{(m)}+...+\theta_nx_n^{(m)}-y^{(m)})\begin{bmatrix}x^{(m)}_0\\x^{(m)}_1\\...\\x^{(m)}_n\end{bmatrix} θ0:=θ0αm1i=1m(θ0+θ1x1(i)+...+θnxn(i)y(i))x0(i)θ1:=θ1αm1i=1m(θ0+θ1x1(i)+...+θnxn(i)y(i))x1(i)θn:=θnαm1i=1m(θ0+θ1x1(i)+...+θnxn(i)y(i))xn(i)θ0θ1...θnαm1(θ0+θ1x1(1)+...+θnxn(1)y(1))x0(1)x1(1)...xn(1)...αm1(θ0+θ1x1(m)+...+θnxn(m)y(m))x0(m)x1(m)...xn(m)

正规方程

将第 i i i个数据的特征值写成行向量的形式(额外加上一个 x 0 x_0 x0): x ( i ) = ( x 0 = 1 , x 1 . . . x n ) x^{(i)}=(x_0=1,x_1...x_n) x(i)=(x0=1,x1...xn)
令矩阵 X X X的第 i i i行为第 i i i组数据的行向量: [ x 0 ( 1 ) , x 1 ( 1 ) . . . x n ( 1 ) x 0 ( 2 ) , x 1 ( 2 ) . . . x n ( 2 ) . . x 0 ( m ) , x 1 ( m ) . . . x n ( m ) ] \begin{bmatrix}x^{(1)}_0 ,x^{(1)}_1...x^{(1)}_n\\x^{(2)}_0 ,x^{(2)}_1...x^{(2)}_n\\..\\x^{(m)}_0 ,x^{(m)}_1...x^{(m)}_n\end{bmatrix} x0(1),x1(1)...xn(1)x0(2),x1(2)...xn(2)..x0(m),x1(m)...xn(m)
m ∗ 1 m*1 m1的矩阵 Y Y Y的第 i i i行第一个元素为第 i i i组数据的答案: [ y ( 1 ) y ( 1 ) . . . y ( m ) ] \begin{bmatrix}y^{(1)}\\y^{(1)}\\...\\y^{(m)}\end{bmatrix} y(1)y(1)...y(m)

最后的答案 θ i \theta_i θi组成的 ( n + 1 ) ∗ 1 (n+1)*1 (n+1)1矩形为 ( X T ∗ X ) − 1 ∗ X T ∗ Y (X^T*X)^{-1}*X^T*Y (XTX)1XTY

很神奇,一步解决问题,最大的时间瓶颈为计算一个 ( n + 1 ) ( n + 1 ) (n+1)(n+1) (n+1)(n+1)矩阵的逆矩阵,复杂度为 O ( n 3 ) O(n^3) O(n3)。也就是说,当特征数量较大时,时间复杂度为很大。但是相较于梯度下降算法,正规方程不需要自己定 α \alpha α,不需要迭代,不需要特征缩放,较为方便。

正规方程……(X^T)X不可逆

一般不会出现,即使出现了,使用求伪逆的函数做也是没有问题的( p i n v    i n    O c t a v e pinv\;in\;Octave pinvinOctave

讲一下导致这种情况的可能原因:

  • 两个特征值线性相关,即 x i = k x j x_i=kx_j xi=kxj
  • m < n m<n m<n,即特征数量多于数据个数

学习视频:吴恩达机器学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值