线性回归模型,含线性回归的定义、推导过程、python代码实现以及结果展示。非常详细的线性回归模型解释

一:线性回归简介

        依据自变量的数量分为一元线性回归和多元线性回归。

                       Y = a*X +b+\varepsilon

                       Y =a _{1}*X_{1} +a_{2}*X_{2}+\cdot \cdot \cdot +a_{n}*X_{n}+b+\varepsilon

                其中:   

                  Y :是因变量(要预测的变量)

                X_{i} :是自变量,它表示的是不同维度的变量值。(用来预测因变量的变量)

                b :是截距

                a _{i}:是不同维度自变量的系数(斜率)

                \varepsilon :是误差项,表示模型无法解释的部分

二:一元线性回归模型

        1、推导过程

        已知一组数据X = \begin{pmatrix} x_{1},x_{2}\cdot \cdot \cdot x_{n} \end{pmatrix}^{T}Y_{R} = \begin{pmatrix} y_{1},y_{2}\cdot \cdot \cdot y_{n} \end{pmatrix}^{T},由回归的定义可知,目的是要找到一个回归方程:Y = a*X+b,使得a*x_{i}+b计算得到的y_{i}尽可能接近真实数据y_{Ri}

        一元方程组:Y= a*X+b其中Y,X是向量 

\left\{\begin{matrix} y_{1} = a*x_{1}+b& & \\ y_{2} = a*x_{2}+b& & \\ \cdot & & \\ \cdot & & \\ \cdot & & \\ y_{n} = a*x_{n}+b& & \end{matrix}\right.                         \begin{bmatrix} y_{1}\\ y_{2}\\ \cdot \\ \cdot \\ \cdot \\ y_{n}\\ \end{bmatrix}=a*\begin{bmatrix} x_{1}\\ x_{2}\\ \cdot \\ \cdot \\ \cdot \\ x_{n}\\ \end{bmatrix} + b=\begin{bmatrix} x_{1}&1\\ x_{2}&1\\ \cdot&\cdot \\ \cdot &\cdot \\ \cdot&\cdot \\ x_{n}&1\\ \end{bmatrix} *\begin{bmatrix} a\\b \end{bmatrix}

则令X =\begin{bmatrix} x_{1}&1\\ x_{2}&1\\ \cdot&\cdot \\ \cdot &\cdot \\ \cdot&\cdot \\ x_{n}&1\\ \end{bmatrix},     A = \begin{bmatrix} a\\b \end{bmatrix} 

变形后的公式为:Y = X*A    注意此时的X是n*2维向量,A是2*1维向量。

定义残差e:

         e = Y_{R} - Y=Y_{R} - X*A    , e是n*1维向量。只有当\sum \left | e_{i} \right |的值最小时,回归方程求的Y与真实值Y_{R}之间的误差最小。求\sum e_{i}^{2}最小。

残差平方和:定义为残差的L2范数的平方\sum e_{i}^{2}。该方法也成为最小二乘法。

 RSS\left ( A \right ) = \sum e_{i}^{2} = e^{2} = e^{T}*e=\left \| Y_{R} - X*A \right \|^{2}_{2}=\left ( Y_{R} - X*A \right )^{T}*\left ( Y_{R} - X*A \right )

展开可以得到:

 RSS(A) =X^{T}Y-A^{T}X^{T}Y-Y^{T}XA+A^{T}X^{T}XA

由于A^{T}*X^{T}*Y得到的是1*1的向量,所以

                                A^{T}X^{T}Y = \left ( A^{T}X^{T}Y \right )^{T} =Y^{T}XA

则可得到:RSS(A) =X^{T}Y-2A^{T}X^{T}Y+A^{T}X^{T}XA

要求一个A,使得残差平方和最小,由极值点求法知道,当\frac{\partial RSS(A)}{\partial A}=0时,RSS(A)取得最小值。

                \boldsymbol{\mathbf{\mathbf{}\frac{\partial RSS(A)}{\partial A}=-2X^{T}Y+2X^{T}XA}}              

对    2A^{T}X^{T}Y求导要用到:   \frac{d_{X^{T}}}{d_{X}} = 1    \frac{d_{\left ( AX \right )^{T}}}{d_{X}} = A^{T}                                          

A^{T}X^{T}XA求导数要用到该公式:  \frac{d_{\left ( U^{T}V \right )}}{d_{X}} =\frac{d_{\left ( U^{T} \right )}}{d_{X}}*V+\frac{d_{\left ( V^{T} \right )}}{d_{X}}*U

\frac{\partial RSS(A)}{\partial A} = 0时,可得X^{T}XA =X^{T}Y,该方程也被称作正规方程

        如果X^{T}X可逆,则最优解A =\left ( X^{T}X \right )^{-1}*X^{T}Y

        如果X^{T}X不可逆,说明方程组中存在两个以上的方程成线性关系(成比例)。这时候我们应该用其他方式求线性回归的解。在此先不做讨论。

2、代码展示

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 生成随机数据.相同的种子生成的数据是一样的。
np.random.seed(0)
#rand(100,1)生成形状为100*1的大小在[0,1)之间的数据.100行1列。
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 向 X 添加偏置项。np.c_[]:对两个矩阵按列合并。
# np.ones(100,1):也是100行1列全为1的矩阵。
#合并后就是100*2的矩阵。由于1的列矩阵是在前面,所以求解出来第一个参数是B,第二个才是A
X_b = np.c_[np.ones((100, 1)), X]  # 在 X 矩阵中添加一列1
# 使用 NumPy 。先求x转置*x的逆,再乘x的转置,再乘y,即最优解A。
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
# 输出拟合的参数
print("拟合的参数:", theta_best)

# 进行预测。两个点:一个0点,一个2.
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]  # 在 X_new 矩阵中添加一列1
y_predict = X_new_b.dot(theta_best)
print("预测值:", y_predict)

# # 绘制数据和拟合直线
plt.plot(X, y, "b.")
plt.plot(X_new, y_predict, "r-")
plt.axis([0, 2, 0, 15])
plt.show()

三:多元回归模型

        1、推导过程

        多元方程Y= a_{1}*X_{1}+a_{2}X_{2}+\cdot \cdot \cdot +a_{p}*X_{p}+B ,其中Y,X,B是向量         

                    \left\{\begin{matrix} y_{1} = a_{1}*x_{11}+a_{2}*x_{12}+\cdot \cdot \cdot +a_{p}*x_{1p}+b_{1}+b_{2}+\cdot \cdot+b_{p}& & \\ y_{2} = a_{1}*x_{21}+a_{2}*x_{22}+\cdot \cdot \cdot +a_{p}*x_{2p}+b_{1}+b_{2}+\cdot \cdot+b_{p}& & \\ \cdot & & \\ \cdot & & \\ \cdot & & \\ y_{n} = a_{2}*x_{n1}+a_{2}*x_{n2}+\cdot \cdot \cdot +ax_{p}*x_{np}+b_{1}+b_{2}+\cdot \cdot+b_{p}& & \end{matrix}\right. 

  \begin{bmatrix} y_{1}\\ y_{2}\\ \cdot \\ \cdot \\ \cdot \\ y_{n}\\ \end{bmatrix}=a_{1}*\begin{bmatrix} x_{11}\\ x_{21}\\ \cdot \\ \cdot \\ \cdot \\ x_{n1}\\ \end{bmatrix}+a_{2}*\begin{bmatrix} x_{12}\\ x_{22}\\ \cdot \\ \cdot \\ \cdot \\ x_{n2}\\ \end{bmatrix}+\cdot \cdot \cdot +a_{p}*\begin{bmatrix} x_{1p}\\ x_{2p}\\ \cdot \\ \cdot \\ \cdot \\ x_{np}\\ \end{bmatrix}+1*\begin{bmatrix} b\\ b\\ b\\ b\\ b\\ \end{bmatrix}

\begin{bmatrix} y_{1}\\ y_{2}\\ \cdot \\ \cdot \\ \cdot \\ y_{n}\\ \end{bmatrix}=\begin{bmatrix} x_{11}&x_{12}&\cdot \cdot \cdot &x_{1p}&1\\ x_{21}&x_{22}&\cdot \cdot \cdot &x_{2p}&1\\ \cdot \\ \cdot \\ \cdot \\ x_{n1}&x_{n2}&\cdot \cdot \cdot &x_{np}&1\\ \end{bmatrix}*\begin{bmatrix} a_{1}\\ a_{2}\\ \cdot \\ \cdot \\ \cdot \\ a_{p}\\ b \end{bmatrix}

则令X=\begin{bmatrix} x_{11}&x_{12}&\cdot \cdot \cdot &x_{1p}&1\\ x_{21}&x_{22}&\cdot \cdot \cdot &x_{2p}&1\\ \cdot \\ \cdot \\ \cdot \\ x_{n1}&x_{n2}&\cdot \cdot \cdot &x_{np}&1\\ \end{bmatrix} A = \begin{bmatrix} a_{1}\\ a_{2}\\ \cdot \\ \cdot \\ \cdot \\ a_{p}\\ b \end{bmatrix}

    变形后的公式为:Y = X*A    注意此时的X是n*p维向量,A是p*1维向量。后面的推导与一元的函数一样。有线性代数基础应该很容易看懂。下面代码展示的是使用 scikit-learn库中的线性回归模型进行回归预测。模型库封装更加完善,推荐使用库中的方法,特别是当X^{T}X不可逆时,库中有解决方案。sklearn.linear_model.LinearRegression()

2、代码展示

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 生成随机数据.相同的种子生成的数据是一样的。
np.random.seed(0)
#rand(100,1)生成形状为100*1的大小在[0,1)之间的数据.100行1列。
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 使用 scikit-learn 进行线性回归
lin_reg = LinearRegression()
lin_reg.fit(X, y)

# 输出拟合的参数
print("截距:", lin_reg.intercept_)
print("斜率:", lin_reg.coef_)

# 进行预测。两个点:一个0点,一个2.
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]  # 在 X_new 矩阵中添加一列1
print("预测值:", lin_reg.predict(X_new))

# 绘制数据和拟合直线
plt.plot(X, y, "b.")
plt.plot(X_new, lin_reg.predict(X_new), "r-")
plt.axis([0, 2, 0, 15])
plt.show()

四:结果展示

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器学习中,线性回归有多种模型可以使用。其中包括传统的线性回归模型和Lasso模型。 传统的线性回归模型是一种非常经典的方法,它通过拟合一个线性函数来预测因变量和自变量之间的关系。这个模型的数学原理可以通过最小二乘法来推导和求解。最小二乘法的目标是最小化预测值与实际观测值之间的残差平方和,从而得到最优的模型参数。\[1\] Lasso模型是一种用于处理多重共线性问题的算法。它通过对系数进行L1正则化来实现特征选择。L1正则化是指将系数的绝对值乘以一个正则化系数,使得一些特征的系数变为零,从而自动丢弃这些特征。Lasso模型在sklearn库中有相应的实现。\[2\] 线性回归是回归分析中最常用的方法之一,因为它比非线性模型更容易拟合,并且估计的统计特性也更容易确定。线性回归模型可以使用最小二乘法来求解,通过最小化残差平方和来得到最优的模型参数。\[3\] 综上所述,机器学习中线性回归有多种模型可供选择,包括传统的线性回归模型和Lasso模型。这些模型可以通过最小二乘法和L1正则化来求解。 #### 引用[.reference_title] - *1* [机器学习——线性回归模型python代码实现](https://blog.csdn.net/qq_43045620/article/details/123079305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取](https://blog.csdn.net/qq_43018832/article/details/128103389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [机器学习常用模型-线性回归模型详解(简单易懂)](https://blog.csdn.net/weixin_43308610/article/details/123346498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值