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

线性回归的原理

  • 多元回归的一般式

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 ^ \hat{y} :预测值

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

x 0 , x 1 , x p x_{0}, x_{1}, \ldots x_{p} :自变量

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

最小二乘法

  • 通过求导求极值解法

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

样本回归模型:

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

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

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最小时的参数确定直线,即把它们看作是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.

扫描二维码关注公众号,回复: 11583910 查看本文章

解得:

β ^ 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}}

β ^ 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 = y ˉ β ^ 1 x ˉ \hat{\beta}_{0}=\bar{y}-\hat{\beta}_1 \bar{x}

β ^ 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}}

  • 通过矩阵求解

定义:
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}
现在有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}

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

h = X θ \mathbf{h}=\mathbf{X} \theta
其中,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})

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

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}
又由于如果矩阵A是对称的:

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

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
则θ最小值:

θ ^ = 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}
这个式子中 ( X T X ) 1 X T \left(X^{T} X\right)^{-1} X^{T} 又被称为伪逆写作 X + X^{+} ,对于行满秩或者列满秩的X ,可以直接求解。

  • 几何意义法求解

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

在几何上,最小二乘法相当于模型(这里就是直线)和试验值的距离的平方求和,假设我们的试验样本张成一个 维空间(满秩的情况)模型写成 f ( w ) = X β f(w)=X \beta 而最小二乘法就是说希望 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

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()

猜你喜欢

转载自blog.csdn.net/weixin_45781143/article/details/107763755