自学内容网 自学内容网

2024-11-18 学习人工智能的Day28 线性回归

线性回归

线性回归是统计学和机器学习中的一种基本预测模型,用于分析和建模目标变量(连续型数据)与一个或多个自变量(解释变量)之间的关系。

线性回归概述

线性回归模型假设目标变量 y 与自变量 X 之间存在线性关系。这种关系可以用以下公式表示:

y = β 0 + β 1 X 1 + β 2 X 2 + … + β n X n + ϵ y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_n X_n + \epsilon y=β0+β1X1+β2X2++βnXn+ϵ
其中:

  • y 是目标变量。
  • X_1, X_2, \ldots, X_n 是自变量。
  • β_0, β_1,β_n 是回归系数,需要通过数据估计。
  • ε 是误差项,表示模型无法解释的随机变异。

线性回归类型

  1. 简单线性回归:只有一个自变量和一个因变量。
  2. 多元线性回归:包含两个或更多自变量。

损失函数

线性回归通常使用最小二乘法来估计模型参数,即最小化实际观测值和模型预测值之间的平方差之和。损失函数定义为:

MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
其中:

  • n 是样本数量。
  • y_i 是第 i 个观测值。
  • y_i是模型预测值。

参数估计

最小二乘法通过求解以下方程来估计参数:

∂ MSE ∂ β j = 0 \frac{\partial \text{MSE}}{\partial \beta_j} = 0 βjMSE=0
这通常通过矩阵运算实现:

β ^ = ( X T X ) − 1 X T y \hat{\beta} = (X^T X)^{-1} X^T y β^=(XTX)1XTy
其中:

  • X 是设计矩阵,包含自变量的值。
  • y 是目标变量的向量。
  • β 是估计的参数向量。

梯度下降法

梯度下降是一种优化算法,用于最小化损失函数。在每次迭代中,参数按照梯度的反方向更新:

β ( t + 1 ) = β ( t ) − α ∇ β MSE ( β ( t ) ) \beta^{(t+1)} = \beta^{(t)} - \alpha \nabla_\beta \text{MSE}(\beta^{(t)}) β(t+1)=β(t)αβMSE(β(t))
其中:

  • α是学习率。
  • β 是损失函数相对于参数的梯度。

正则化

为了防止过拟合,线性回归模型可以加入正则化项,如岭回归(L2正则化)和Lasso回归(L1正则化):

  • 岭回归
    Loss = MSE + λ ∑ j = 1 n β j 2 \text{Loss} = \text{MSE} + \lambda \sum_{j=1}^{n} \beta_j^2 Loss=MSE+λj=1nβj2

  • Lasso回归
    Loss = MSE + λ ∑ j = 1 n ∣ β j ∣ \text{Loss} = \text{MSE} + \lambda \sum_{j=1}^{n} |\beta_j| Loss=MSE+λj=1nβj

其中 λ 是正则化强度参数。

应用

线性回归广泛应用于各种预测任务,如房价预测、股票价格分析、销售预测等。尽管线性回归模型简单,但它提供了对数据关系的基本理解,并且可以作为更复杂模型的基准。

线性回归模型的实现和应用通常依赖于统计软件或机器学习库,如Python的scikit-learn库,它提供了简单而强大的接口来训练和评估线性回归模型。

最后介绍一下sklearn库中的接口

import numpy as np
import matplotlib.pyplot as plt

w = np.linspace(-10,20,100)
# print(w)
def loss(w):
     return (w-3.5)**2-4.5*w+10
def dloss(w):
    return 2*(w-3.5)-4.5

plt.plot(w,loss(w)) # 当该直线与x轴相交,表示损失为0,拟合曲线与所有已知点重合,
# 且该曲线无法出现小于0的值,因为该曲线是由均方误差算的


# 梯度下降
# 学习率
learning_rate = 0.01
# 初始化一个w值
np.random.seed(1)
w = np.random.randint(-10,20) # 随机给一个w值:-5
e = loss(w) # 初始化的w为-5时的loss值
x = [w]
y = [e]


# 用循环来多级下降
for i in range(100):
    w = w-learning_rate*dloss(w)
    e = loss(w)
    x.append(w)
    y.append(e)
    
# 单次下降
# # 第一次梯度下降
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)
# # 第二次梯度下降
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)
# # 第三次
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)


plt.scatter(x,y)
plt.show()

原文地址:https://blog.csdn.net/ctrey_/article/details/143864341

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!