机器学习(六)多元线性回归之最小二乘法

线性回归的原理

  • 多元回归的一般式

y ^ ( θ , x ) = θ 0 + θ 1 x 1 + … + θ p x p \hat{y}(\theta, x)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{p} x_{p} y^(θ,x)=θ0+θ1x1++θpxp

其中:
y ^ \hat{y} y^:预测值

θ 0 , θ 1 , … θ p \theta_{0}, \theta_{1}, \ldots \theta_{p} θ0,θ1,θp:参数

x 0 , x 1 , … x p x_{0}, x_{1}, \ldots x_{p} x0,x1,xp:自变量

  • 方程的拟合思路
线性回归方程如何得到
所有预测值与真实值平方和最小所取得的系数
怎么计算所有误差平方和最小时取得的参数
最小二乘法or梯度下降法

最小二乘法

  • 通过求导求极值解法

下面通过一元线性回归模型做推导:

样本回归模型:

y ^ i = β ^ 0 + β ^ 1 x i \hat{y}_{i}=\hat{\beta}_{0}+\hat{\beta}_{1} x_{i} y^i=β^0+β^1xi

残差平方和(损失函数):

Q = ∑ i = 1 n e i 2 = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) 2 Q=\sum_{i=1}^{n} e_{i}^{2}=\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}=\sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)^{2} Q=i=1nei2=i=1n(yiy^i)2=i=1n(yiβ^0β^1xi)2

通过使得Q最小时的参数确定直线,即把它们看作是Q的函数,就变成了一个求极值的问题,可以通过求导数得到。求Q对两个待估参数的偏导数

{ ∂ Q ∂ β ^ 0 = 2 ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) ( − 1 ) = 0 ∂ Q ∂ β ^ 1 = 2 ∑ i = 1 n ( y i − β ^ 0 − β ^ 1 x i ) ( − x i ) = 0 \left\{\begin{aligned} \frac{\partial Q}{\partial \hat{\beta}_{0}} &=2 \sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)(-1)=0 \\ \frac{\partial Q}{\partial \hat{\beta}_{1}} &=2 \sum_{i=1}^{n}\left(y_{i}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{i}\right)\left(-x_{i}\right)=0 \end{aligned}\right. β^0Qβ^1Q=2i=1n(yiβ^0β^1xi)(1)=0=2i=1n(yiβ^0β^1xi)(xi)=0

解得:

β ^ 1 = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 \hat{\beta}_{1}=\frac{n \sum x_{i} y_{i}-\sum x_{i} \sum y_{i}}{n \sum x_{i}^{2}-\left(\sum x_{i}\right)^{2}} β^1=nxi2(xi)2nxiyixiyi

β ^ 0 = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 \hat{\beta}_{0}=\frac{\sum x_{i}^{2} \sum y_{i}-\sum x_{i} \sum x_{i} y_{i}}{n \sum x_{i}^{2}-\left(\sum x_{i}\right)^{2}} β^0=nxi2(xi)2xi2yixixiyi

其中:

β ^ 0 = y ˉ − β ^ 1 x ˉ \hat{\beta}_{0}=\bar{y}-\hat{\beta}_1 \bar{x} β^0=yˉβ^1xˉ

β ^ 1 = ∑ i = 1 n x i y i − n x y ‾ ∑ i = 1 n x i 2 − n x ˉ 2 \hat{\beta}_{1}=\frac{\sum_{i=1}^{n} x_{i} y_{i}-n \overline{x y}}{\sum_{i=1}^{n} x_{i}^2-n \bar{x}^{2}} β^1=i=1nxi2nxˉ2i=1nxiyinxy

  • 通过矩阵求解

定义:
h θ ( x 1 , x 2 , … x n − 1 ) = θ 0 + θ 1 x 1 + … + θ n x n − 1 h_{\theta}\left(x_{1}, x_{2}, \ldots x_{n-1}\right)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{n} x_{n-1} hθ(x1,x2,xn1)=θ0+θ1x1++θnxn1
现在有m个样本,每个样本有n−1维特征将所有样本点代入模型中得:

h 1 = θ 0 + θ 1 x 1 , 1 + θ 2 x 1 , 2 + … + θ n − 1 x 1 , n − 1 h 2 = θ 0 + θ 1 x 2 , 1 + θ 2 x 2 , 2 + … + θ n − 1 x 2 , n − 1 ⋮ h m = θ 0 + θ 1 x m , 1 + θ 2 x m , 2 + … + θ n − 1 x m , n − 1 \begin{array}{l} h_{1}=\theta_{0}+\theta_{1} x_{1,1}+\theta_{2} x_{1,2}+\ldots+\theta_{n-1} x_{1, n-1} \\ h_{2}=\theta_{0}+\theta_{1} x_{2,1}+\theta_{2} x_{2,2}+\ldots+\theta_{n-1} x_{2, n-1} \\ \vdots \\ h_{m}=\theta_{0}+\theta_{1} x_{m, 1}+\theta_{2} x_{m, 2}+\ldots+\theta_{n-1} x_{m, n-1} \end{array} h1=θ0+θ1x1,1+θ2x1,2++θn1x1,n1h2=θ0+θ1x2,1+θ2x2,2++θn1x2,n1hm=θ0+θ1xm,1+θ2xm,2++θn1xm,n1

为方便用矩阵表示令 x 0 = 1 x_0 = 1 x0=1于是上述方程可以用矩阵表示为:

h = X θ \mathbf{h}=\mathbf{X} \theta h=Xθ
其中,h为m x 1的向量, 代表模型的理论值,θ 为n x 1的向量,X为 m x n维的矩阵,m代表样本的个数,n代表样本的特征数,于是目标损失函数用矩阵表示为:

J ( θ ) = ∥ h − Y ∥ 2 = ∥ X θ − Y ∥ 2 = ( X θ − Y ) T ( X θ − Y ) J(\theta)=\|\mathbf{h}-\mathbf{Y}\|^{2}=\|\mathbf{X} \theta-\mathbf{Y}\|^{2}=(\mathbf{X} \theta-\mathbf{Y})^{T}(\mathbf{X} \theta-\mathbf{Y}) J(θ)=hY2=XθY2=(XθY)T(XθY)

关于矩阵的求导补充以下知识点:

∂ x T a ∂ x = ∂ a T x ∂ x = a ∂ x T A x ∂ x = A x + A T x \begin{aligned} \frac{\partial x^{T} a}{\partial x} &=\frac{\partial a^{T} x}{\partial x}=a \\ \frac{\partial x^{T} A x}{\partial x} &=A x+A^{T} x \end{aligned} xxTaxxTAx=xaTx=a=Ax+ATx
又由于如果矩阵A是对称的:

A x + A T x = 2 A x A x+A^{T} x=2 A x Ax+ATx=2Ax
对目标函数化简:

J ( θ ) = θ T X T X θ − θ T X T Y − Y T X θ + Y T Y J(\theta)=\theta^{T} X^{T} X \theta-\theta^{T} X^{T} Y-Y^{T} X \theta+Y^{T} Y J(θ)=θTXTXθθTXTYYTXθ+YTY
则θ最小值:

θ ^ = argmin ⁡ θ L ( θ ) ⟶ ∂ ∂ θ L ( θ ) = 0 ⟶ 2 X T X θ ^ − 2 X T Y = 0 ⟶ θ ^ = ( X T X ) − 1 X T Y = X + Y \begin{aligned} \hat{\theta}=\underset{\theta}{\operatorname{argmin}} L(\theta) & \longrightarrow \frac{\partial}{\partial \theta} L(\theta)=0 \\ & \longrightarrow 2 X^{T} X \hat{\theta}-2 X^{T} Y=0 \\ & \longrightarrow \hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y=X^{+} Y \end{aligned} θ^=θargminL(θ)θL(θ)=02XTXθ^2XTY=0θ^=(XTX)1XTY=X+Y
这个式子中 ( X T X ) − 1 X T \left(X^{T} X\right)^{-1} X^{T} (XTX)1XT又被称为伪逆写作 X + X^{+} X+,对于行满秩或者列满秩的X ,可以直接求解。

  • 几何意义法求解

求解 b 在A的列向量空间中的投影。

在几何上,最小二乘法相当于模型(这里就是直线)和试验值的距离的平方求和,假设我们的试验样本张成一个 维空间(满秩的情况)模型写成 f ( w ) = X β f(w)=X \beta f(w)=Xβ而最小二乘法就是说希望 Y 和这个模型距离越小越好,于是它们的差应该与这个张成的空间垂直:

X T ⋅ ( Y − X β ) = 0 ⟶ β = ( X T X ) − 1 X T Y X^{T} \cdot(Y-X \beta)=0 \longrightarrow \beta=\left(X^{T} X\right)^{-1} X^{T} Y XT(YXβ)=0β=(XTX)1XTY

python实现最小二乘法(通过矩阵求解)

class LinearRegression:
    '''使用Python实现的线性回归.(最小二乘法)'''
    def fit(self,X,y):
        '''根据提提供的训练数据X,对模型进行训练。
        
        Parameters
        ------
        X :类数组类型。形状:[样本数量,特征数量]
        特征矩阵,用来对模型进行训练
        
        y = 类数组类型,形状:[样本数量]
        
        '''
        # 如果X是数组对象的一部分,而不是完整的对象数据(eg:切片)则无法完成矩阵的转换
        X = np.asmatrix(X.copy())  #这里创建X的拷贝对象,避免转换成矩阵时候失败
        # y 为一维结构(行向量或列向量)没有限制,可以不用拷贝
        # 注意:现在要进行矩阵的运算,需要是二维结构,通过reshape方法进行转换
        y = np.asmatrix(y).reshape(-1,1)    #    (-1,1)意思:把数组转换为一列,依据数据自定义行的矩阵
        # 通过最小二乘公式,求解出最佳的权重值
        self.w_ = (X.T * X ).I * X.T * y
    def predict(self,X):
        '''根据参数传递的样本X,delattr样本数据进行预测。
    
         Parameters
         ------
         X:类数组类型。形状[样本数量,特征数量]
         待预测的样本特征(属性)
       
         Returns
         ------
         result:数组类型
                预测的结果
        '''
        # 将X转换为矩阵 注意:需要对X进行拷贝
        X = np.asmatrix(X.copy())
        result = X * self.w_
        # 将矩阵转换为ndarray数组 ,进行扁平化处理 ,然后返回结果
        return np.array(result).ravel()
  • 10
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值