[机器学习]线性回归初探

时间:2022-02-14 01:12:25

[机器学习]线性回归初探

在机器学习中有监督学习下有两种:

回归:指给定一个输入,预测一个连续的输出值。

分类:指给定一个输入,将其分为若干个预定义的类别中的一种。分类算法中会给出一个明确的类别。

分类和回归的区别在于输出的类型不同,分类输出离散的类别标签,而回归输出连续的数值。举个例子,如果我们要通过一张图片判断它是狗还是猫,这就是一个分类问题;如果我们要预测这张图片上狗的年龄,这就是一个回归问题。如果我们要通过一个人的症状来判断他们患的是哪一种疾病,这就是一个分类问题;如果我们要预测这个人的寿命,这就是一个回归问题。

回归

回归问题是指通过对已知数据的学习,建立一个模型,该模型可以预测一个连续值输出,例如预测一个房子的价格、股票的价格等。

线性回归是回归问题中最基本的一种方法。它假设输入和输出之间存在一个线性关系,即输出可以用输入的线性组合表示。

具体地说,给定一个包含 n 个特征的样本,线性回归模型的目标是找到一个函数,它将输入的 n 个特征值映射到一个连续的输出值上。

[机器学习]线性回归初探

举个例子:

数据:工资,年龄 (2个特征)

目标:预测一个贷款公司将会贷款多少钱给这个人(标签)

考虑:2个特征都会影响公司的最终决定,那么这2个特征对于最终目标的影响有多大呢?也就是权重有多大?(参数)

公式推导:

假设工资为 x 1 x_1 x1,年龄为 x 2 x_2 x2,最终贷款为 y y y,那么这个公司需要根据一个指定的比重来判断最终给出的钱应该是多少,也就得到了 y = θ 1 x 1 + θ 2 x 2 y=\theta_1x_1+\theta_2x_2 y=θ1x1+θ2x2

[机器学习]线性回归初探

虽然存在了,但是没办法拟合所有的数据点,应该要尽可能的拟合更多的数据点才行,因此最终还得需要有一个常数 θ 0 \theta_0 θ0(偏置项)来微调计算最终结果,那么就可以得到公式

y = θ 0 + θ 1 x 1 + θ 2 x 2 y=\theta_0+\theta_1x_1+\theta_2x_2 y=θ0+θ1x1+θ2x2

其中应该是有 x 0 x_0 x0,而 x 0 x_0 x0应该始终值为1。

因此公式调整为

y = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 y=\theta_0x_0+\theta_1x_1+\theta_2x_2 y=θ0x0+θ1x1+θ2x2

其中, y y y 是输出值, x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn 是输入特征, θ 0 , θ 1 , θ 2 , . . . , θ n \theta_0, \theta_1, \theta_2, ..., \theta_n θ0,θ1,θ2,...,θn 是待学习的模型参数。

也就是

f ( x ) = ∑ i = 0 N θ i x i = θ T x f(x)=\sum_{i=0}^N\theta_ix_i=\theta^Tx f(x)=i=0Nθixi=θTx

所以最终 θ T \theta^T θT便是需要求解的内容

误差

在机器学习中的线性回归问题中,误差通常是指预测值和真实值之间的差异,也就是模型的预测误差。误差可以用许多不同的指标来度量,其中最常用的指标是均方误差(Mean Squared Error,MSE)。

模型计算出来的是预测值,而你给定的是真实值,两者之间肯定存在误差。

因此存在公式 $ y{(i)}=\thetaTx{(i)}+\xi{(i)}$

那么我肯定是希望误差越小越好,也就是 ξ ( i ) \xi^{(i)} ξ(i)值越小越好。

在机器学习中,线性回归模型通常是通过最小化数据集上的误差来训练的。误差通常被定义为模型预测值和真实值之间的差异。对于一个给定的数据样本 i i i,其误差 ξ ( i ) \xi^{(i)} ξ(i) 可以被表示为:

[机器学习]线性回归初探

误差 ξ ( i ) \xi^{(i)} ξ(i) 独立且具有相同分布,且服从均值为零方差为 θ 2 \theta^2 θ2 的高斯分布。这意味着误差 ξ ( i ) \xi^{(i)} ξ(i) 是随机的,并且其随机性是由高斯分布来建模的。具体来说,它意味着:

  • 误差 ξ ( i ) \xi^{(i)} ξ(i) 的值不仅仅取决于输入数据 x ( i ) x^{(i)} x(i),还受到一些随机性的影响。
  • 不同样本的误差 ξ ( i ) \xi^{(i)} ξ(i) 是相互独立的,即一个样本的误差值并不能预测另一个样本的误差值。
  • 误差 ξ ( i ) \xi^{(i)} ξ(i) 的分布是高斯分布,也称为正态分布,其均值为零,方差为 θ 2 \theta^2 θ2。高斯分布是一种常见的分布形式,其在自然界中的许多现象中都有应用,例如身高、体重等。

这些假设的来历通常是通过对数据集进行统计分析和建模而得到的。在训练模型时,这些假设允许我们使用最小二乘法来确定模型参数,进而最小化数据集上的误差。

因此最终误差也是可以获得近似值的。

在机器学习中,线性回归模型通常假设误差服从均值为 0 0 0、方差为 θ 2 \theta^2 θ2 的高斯分布,即:

在机器学习中,线性回归模型通常假设误差服从均值为 0 0 0、方差为 θ 2 \theta^2 θ2 的高斯分布,即 ξ ( i ) ∼ N ( 0 , θ 2 ) \xi^{(i)} \sim N(0,\theta^2) ξ(i)N(0,θ2),其中 ξ ( i ) \xi^{(i)} ξ(i) 表示第 i i i 个样本的误差。高斯分布的概率密度函数为 p ( ξ ( i ) ) = 1 2 π θ e − ( ξ ( i ) ) 2 2 θ 2 p(\xi^{(i)}) = \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(\xi^{(i)})^2}{2\theta^2}} p(ξ(i))=2π θ1e2θ2(ξ(i))2

如果我们假设每个样本的误差都服从独立同分布的高斯分布,则整个数据集的概率密度函数为

p ( ξ ) = ∏ i = 1 m 1 2 π θ e − ( ξ ( i ) ) 2 2 θ 2 p(\boldsymbol{\xi}) = \prod_{i=1}^{m} \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(\xi^{(i)})^2}{2\theta^2}} p(ξ)=i=1m2π θ1e2θ2(ξ(i))2

其中, ξ = ( ξ ( 1 ) , ξ ( 2 ) , … , ξ ( m ) ) \boldsymbol{\xi} = (\xi^{(1)},\xi^{(2)},\dots,\xi^{(m)}) ξ=(ξ(1),ξ(2),,ξ(m)) 表示整个数据集的误差向量。

将 $ y{(i)}=\thetaTx{(i)}+\xi{(i)}$ 代入 p ( ξ ( i ) ) = 1 2 π θ e − ( ξ ( i ) ) 2 2 θ 2 p(\xi^{(i)}) = \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(\xi^{(i)})^2}{2\theta^2}} p(ξ(i))=2π θ1e2θ2(ξ(i))2 中,得到:

p ( y ( i ) ∣ θ , x ( i ) ) = 1 2 π θ e − ( y ( i ) − θ T x ( i ) ) 2 2 θ 2 p(y^{(i)}|\theta,x^{(i)}) = \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\theta^2}} p(y(i)θ,x(i))=2π θ1e2θ2(y(i)θTx(i))2

似然函数

在机器学习中,我们通常使用似然函数来描述模型参数对样本观测结果的拟合程度。对于线性回归模型,似然函数可以表示为:

L ( θ ∣ x , y ) = ∏ i = 1 m p ( y ( i ) ∣ θ , x ( i ) ) = ∏ i = 1 m 1 2 π θ e − ( y ( i ) − θ T x ( i ) ) 2 2 θ 2 L(\theta|x,y) = \prod_{i=1}^{m} p(y^{(i)}|\theta,x^{(i)}) = \prod_{i=1}^{m} \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\theta^2}} L(θx,y)=i=1mp(y(i)θ,x(i))=i=1m2π θ1e2θ2(y(i)θTx(i))2

表示什么样的参数跟我们的数据组合后恰好是真实值

但由于这个公式是一个乘积公式,计算机计算乘积会极度麻烦,因此需要转换成加法的方式

因此两边同时取对数,并化简为加减法的形式

将似然函数两边取对数可以得到:

log ⁡ L ( θ ∣ x , y ) = ∑ i = 1 m log ⁡ p ( y ( i ) ∣ θ , x ( i ) ) = ∑ i = 1 m log ⁡ 1 2 π θ e − ( y ( i ) − θ T x ( i ) ) 2 2 θ 2 \log L(\theta|x,y) = \sum_{i=1}^{m} \log p(y^{(i)}|\theta,x^{(i)}) = \sum_{i=1}^{m} \log \frac{1}{\sqrt{2\pi}\theta} e^{-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\theta^2}} logL(θx,y)=i=1mlogp(y(i)θ,x(i))=i=1mlog2π θ1e2θ2(y(i)θTx(i))2

进一步化简,可以得到:

log ⁡ L ( θ ∣ x , y ) = − m 2 log ⁡ 2 π − m log ⁡ θ − ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 2 θ 2 \log L(\theta|x,y) = -\frac{m}{2} \log 2\pi - m \log\theta - \sum_{i=1}^{m} \frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\theta^2} logL(θx,y)=2mlog2πmlogθi=1m2θ2(y(i)θTx(i))2

也即

log ⁡ L ( θ ∣ x , y ) = − m 2 log ⁡ 2 π − m log ⁡ θ − 1 2 θ 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 \log L(\theta|x,y) = -\frac{m}{2} \log 2\pi - m \log\theta - \frac{1}{2\theta^2} \sum_{i=1}^{m} (y^{(i)}-\theta^Tx^{(i)})^2 logL(θx,y)=2mlog2πmlogθ2θ21i=1m(y(i)θTx(i))2

因为在最大化似然函数时, log ⁡ L ( θ ∣ x , y ) \log L(\theta|x,y) logL(θx,y) 是单调递增的,所以最大化 log ⁡ L ( θ ∣ x , y ) \log L(\theta|x,y) logL(θx,y) 等价于最大化 L ( θ ∣ x , y ) L(\theta|x,y) L(θx,y)

目标:让似然函数越大越好,因为我们假设数据集中的每个样本都是独立同分布的,因此似然函数就是每个样本的概率密度函数的乘积,似然函数的值越大,说明我们的模型对观测数据的拟合度越好。

因此最终得到的一个简化公式为:

J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2}\displaystyle\sum_{i=1}^{m}(y^{(i)}-\theta^Tx^{(i)})^2 J(θ)=21i=1m(y(i)θTx(i))2

由于前面的值是个定值,因此这个 J ( θ ) J(\theta) J(θ)应该是越小,似然函数的值才会越大。这个 J ( θ ) J(\theta) J(θ)公式也叫 最小二乘法

J ( θ ) J(\theta) J(θ) 展开后得到

J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − θ T x ( i ) ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2}\displaystyle\sum_{i=1}^{m}(h_\theta(x^{(i)})-\theta^Tx^{(i)})^2=\frac{1}{2}(X\theta-y)^T(X\theta-y) J(θ)=21i=1m(hθ(x(i))θTx(i))2=21(y)T(y)

对于矩阵进行展开平方项等于转置乘上自身,这里的 X X X θ \theta θ是一个矩阵的概念

也即给定什么样的 θ \theta θ使得 J ( θ ) J(\theta) J(θ)越小越好

因此需要对 1 2 ( X θ − y ) T ( X θ − y ) \frac{1}{2}(X\theta-y)^T(X\theta-y) 21(y)T(y) θ \theta θ求偏导

( X θ − y ) T ( X θ − y ) = θ T X T X θ − θ T X T y − y T X θ + y T y (X\theta-y)^T(X\theta-y)=\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty (y)T(y)=θTXTθTXTyyT+yTy

d d θ [ 1 2 ( X θ − y ) T ( X θ − y ) ] = d d θ [ 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ] \frac{d}{d\theta}[\frac{1}{2}(X\theta-y)^T(X\theta-y)]=\frac{d}{d\theta}[\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty)] dθd[21(y)T(y)]=dθd[21(θTXTθTXTyyT+yTy)]

= ( X T X θ + X T y ) − ( X T y ) T =(X^TX\theta+X^Ty)-(X^Ty)^T =(XT+XTy)(XTy)T

= X T ( X θ − y ) =X^T(X\theta-y) =XT(y)

因此, d d θ [ 1 2 ( X θ − y ) T ( X θ − y ) ] = X T ( X θ − y ) \frac{d}{d\theta}[\frac{1}{2}(X\theta-y)^T(X\theta-y)]=X^T(X\theta-y) dθd[21(y)T(y)]=XT(y)

让偏导等于0:

首先,对 1 2 ( X θ − y ) T ( X θ − y ) \frac{1}{2}(X\theta-y)^T(X\theta-y) 21(y)T(y)关于 θ \theta θ求偏导数:

∂ ∂ θ ( 1 2 ( X θ − y ) T ( X θ − y ) ) = X T ( X θ − y ) \frac{\partial}{\partial\theta}\left(\frac{1}{2}(X\theta-y)^T(X\theta-y)\right) = X^T(X\theta-y) θ(21(y)T(y))=XT(y)

然后令其为0,得到:

X T ( X θ − y ) = 0 X^T(X\theta-y) = 0 XT(y)=0

移项得到:

X T X θ = X T y X^TX\theta = X^Ty XT=XTy

因为 X T X X^TX XTX是可逆的,所以可以解出 θ \theta θ

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

梯度下降和梯度上升

梯度下降和梯度上升都是优化算法中常用的方法。以梯度下降为例,它是一种用于最小化目标函数的迭代方法。具体来说,对于一个目标函数,我们可以计算出它在某个点的梯度(即函数在这个点的导数),这个梯度表示函数在这个点上升最快的方向。而梯度下降算法就是沿着这个梯度相反的方向(即下降最快的方向)不断迭代,直到找到函数的最小值。

梯度上升和梯度下降类似,不同的是它是用于最大化目标函数的迭代方法。具体来说,我们同样可以计算出函数在某个点的梯度,但这个梯度表示函数在这个点上升最快的方向。梯度上升算法就是沿着这个梯度的方向不断迭代,直到找到函数的最大值。

梯度下降和梯度上升都是通过不断地迭代来更新参数(或变量),直到达到目标函数最小值或最大值的优化算法。在实际的机器学习应用中,梯度下降算法常用于线性回归、逻辑回归等模型的求解,而梯度上升算法则常用于支持向量机、人工神经网络等模型的求解。

当我们得到一个目标函数后,怎么进行求解?(结果并不一定可解)机器学习就是我交给机器一堆数据,然后告诉机器什么样的学习方式是对的(获取目标函数),然后让它朝着这个方向去优化。

以梯度下降为例:

[机器学习]线性回归初探

也即让机器找到损失点最低的位置,最终求取出的满足条件的 θ \theta θ即是可行的

而对于我们的举例来讲,需要找满足条件的 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1

[机器学习]线性回归初探

由于数据样本之间是独立的, x 0 x_0 x0 x 1 x_1 x1之间并不会相互影响,那么在优化时,应该是分别对 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1进行优化

目标函数: J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2m}\displaystyle\sum_{i=1}^{m}(y^{(i)}-\theta^Tx^{(i)})^2 J(θ)=2m1i=1m(y(i)θTx(i))2

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m}\displaystyle\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

其中, h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))是模型的预测值,即 h θ ( x ( i ) ) = θ T x ( i ) h_\theta(x^{(i)})=\theta^Tx^{(i)} hθ(x(i))=θTx(i)

批量梯度下降

θ 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αm1i=1m(hθ(x(i))y(i))xj(i)

i表示样本,j表示第几列

容易获得最优解,但是由于需要考虑所有样本,速度慢

随机梯度下降

θ j ′ = θ j + ( y i − h 0 ( x i ) ) x j i \theta_j' = \theta_j + (y^i-h_0(x_i))x_j^i θj=θj+(yih0(xi))xji

每次找一个样本,迭代速度快但不一定会朝着收敛方向

小批量梯度下降

θ j ′ = θ j − α 1 10 ∑ i = 1 i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j' = \theta_j - \alpha\frac{1}{10}\sum_{i=1}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)} θj=θjα101i=1i+9(hθ(x(k))y(k))xj(k)

每次更新选择一小部分数据来算

学习率 α \alpha α(步长) 对结果会产生巨大影响,一般要小一点

一般用优化算法进行求解,不采用直接求解的方式

j^i$

每次找一个样本,迭代速度快但不一定会朝着收敛方向

小批量梯度下降

θ j ′ = θ j − α 1 10 ∑ i = 1 i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j' = \theta_j - \alpha\frac{1}{10}\sum_{i=1}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)} θj=θjα101i=1i+9(hθ(x(k))y(k))xj(k)

每次更新选择一小部分数据来算

学习率 α \alpha α(步长) 对结果会产生巨大影响,一般要小一点

一般用优化算法进行求解,不采用直接求解的方式