当前位置: 首页 > news >正文

【机器学习】机器学习算法-线性回归算法

文章目录

    • 线性回归概述
      • 线性回归的类型:
      • 线性回归的假设:
      • 线性回归的实现步骤:
      • 线性回归的应用:
    • 公式推导
      • 1. 最小二乘法
        • 目标
        • 推导
      • 2. 梯度下降法
        • 目标
        • 推导
      • 计算过程
    • Python实现
      • 安装`scikit-learn`
      • 线性回归代码示例
      • 代码解释

线性回归概述

线性回归(Linear Regression)是统计学中的一种基本算法,用于模拟一个或多个自变量(解释变量)与因变量(响应变量)之间的线性关系。线性回归的目标是找到最佳拟合直线(或平面),这条直线可以最小化观测值和预测值之间的差异。

线性回归的类型:

  1. 简单线性回归

    • 只有一个自变量和一个因变量,模型形式为 y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ,其中 e t a 0 eta_0 eta0是截距, β 1 \beta_1 β1 是斜率, ϵ \epsilon ϵ是误差项。
  2. 多元线性回归

    • 有多个自变量和一个因变量,模型形式为 y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β n x n + ϵ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n + \epsilon y=β0+β1x1+β2x2+...+βnxn+ϵ

线性回归的假设:

  1. 线性关系

    • 自变量和因变量之间存在线性关系。
  2. 独立性

    • 自变量之间相互独立,没有多重共线性。
  3. 同方差性

    • 误差项具有恒定的方差。
  4. 正态分布

    • 误差项呈正态分布。
  5. 无完全多重共线性

    • 自变量之间不存在完全的线性关系。

线性回归的实现步骤:

  1. 数据收集

    • 收集相关数据,包括自变量和因变量。
  2. 数据探索

    • 使用统计图表和描述性统计量来探索数据特征。
  3. 模型建立

    • 根据数据建立线性回归模型。
  4. 参数估计

    • 使用最小二乘法等方法估计模型参数。
  5. 模型检验

    • 检验模型的有效性,包括参数的显著性检验和模型的整体拟合度检验。
  6. 模型优化

    • 如果需要,对模型进行优化,如添加或删除自变量,或转换变量。
  7. 预测和解释

    • 使用模型进行预测,并解释结果。

线性回归的应用:

线性回归在各个领域都有广泛的应用,包括经济学、社会科学、生物学、工程学等。它可以用于预测房价、销售额、温度变化、疾病风险等。

线性回归是机器学习和统计分析中的一个基础工具,为更复杂的模型和算法提供了理论基础。尽管在实际应用中可能会遇到非线性关系,但线性回归模型的简单性和直观性使其成为一个强大的分析工具。

公式推导

线性回归算法的推导原理主要基于最小二乘法和梯度下降法。下面是详细的推导过程和计算步骤:

1. 最小二乘法

目标

我们的目标是找到一组参数 θ \theta θ ,使得预测值 y ^ \hat{y} y^ 与实际值 y y y 之间的误差平方和最小。即最小化损失函数 J ( θ ) J(\theta) J(θ)

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2

其中:

  • h θ ( x ) = θ T x = θ 0 + θ 1 x 1 + … + θ n x n h_{\theta}(x) = \theta^T x = \theta_0 + \theta_1 x_1 + \ldots + \theta_n x_n hθ(x)=θTx=θ0+θ1x1++θnxn 是线性回归模型的预测函数。
  • ( m ) 是样本数量。
推导

将损失函数 J ( θ ) J(\theta) J(θ) 展开:

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

为了找到使 J ( θ ) J(\theta) J(θ) 最小的 θ \theta θ,我们需要对 J ( θ ) J(\theta) J(θ) 分别对每个 θ j \theta_j θj 求偏导数,并令其等于零:

∂ 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} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

X X X是设计矩阵,其中每一行是一个样本的特征向量,每一列是一个特征,加上一列全为1的偏置项。设 y y y是目标值向量。则上述方程可以写成矩阵形式:

∇ J ( θ ) = 1 m ( X T X θ − X T y ) \nabla J(\theta) = \frac{1}{m} (X^T X \theta - X^T y) J(θ)=m1(XTXTy)

令梯度为零,解得:

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

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

这就是线性回归模型的正规方程解。

2. 梯度下降法

目标

梯度下降法是一种迭代优化算法,用于逐步逼近最小化损失函数的参数值。

推导

损失函数 J ( θ ) J(\theta) J(θ)对每个 θ j \theta_j θj 的偏导数为:

∂ 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} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

写成矩阵形式:

∇ J ( θ ) = 1 m X T ( X θ − y ) \nabla J(\theta) = \frac{1}{m} X^T (X \theta - y) J(θ)=m1XT(y)

梯度下降法的更新规则为:

θ : = θ − α ∇ J ( θ ) \theta := \theta - \alpha \nabla J(\theta) θ:=θαJ(θ)

即:

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

其中 α \alpha α 是学习率。

计算过程

  1. 初始化参数:随机选择一组初始参数 θ \theta θ
  2. 迭代更新
    • 计算预测值 y ^ = X θ \hat{y} = X \theta y^=
    • 计算误差 e = y ^ − y e = \hat{y} - y e=y^y
    • 更新参数 θ \theta θ
      θ : = θ − α 1 m X T e \theta := \theta - \alpha \frac{1}{m} X^T e θ:=θαm1XTe
  3. 重复步骤2,直到满足停止条件(如达到最大迭代次数,或损失函数变化很小)。

通过上述推导和计算过程,我们可以得到线性回归模型的最优参数 ( \theta ),从而对新的输入数据进行预测。

Python实现

在Python中,实现线性回归通常使用scikit-learn库,这是一个功能强大的机器学习库。以下是使用scikit-learn进行线性回归的示例代码,以及详细的注释说明:

安装scikit-learn

首先,确保你已经安装了scikit-learn库。如果还没有安装,可以通过以下命令安装:

pip install scikit-learn

线性回归代码示例

# 导入必要的库
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt# 创建一些示例数据
# 特征矩阵 X,包含一个常数项(截距)和自变量
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])  # 5个样本,每个样本2个特征
# 目标向量 y,包含每个样本对应的目标值
y = np.array([1, 2, 1, 3, 5])# 创建线性回归模型实例
model = LinearRegression()# 训练模型
# fit方法用于根据提供的数据拟合模型
model.fit(X, y)# 获取模型参数
# coef_ 是特征的系数,intercept_ 是截距
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)# 使用模型进行预测
# predict方法用于根据模型和输入特征进行预测
predictions = model.predict(X)# 绘制数据点和拟合线
plt.scatter(X[:, 1], y, color='blue')  # 绘制实际的数据点
plt.plot(X[:, 1], predictions, color='red')  # 绘制拟合线
plt.title('Linear Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()

代码解释

  1. 导入库:导入numpy用于数据处理,LinearRegression用于创建线性回归模型,matplotlib.pyplot用于绘图。

  2. 创建数据:创建一个特征矩阵X和一个目标向量y。在这个例子中,我们使用了一个简单的二维特征空间。

  3. 创建模型实例:实例化LinearRegression类来创建一个线性回归模型。

  4. 训练模型:使用fit方法训练模型。这个方法会根据提供的数据计算模型参数。

  5. 获取模型参数:通过coef_intercept_属性获取模型的系数和截距。

  6. 进行预测:使用predict方法进行预测。这个方法会根据输入特征和模型参数计算预测值。

  7. 绘图:使用matplotlib绘制实际的数据点和拟合线,以直观地展示模型的预测效果。
    这个简单的示例展示了如何使用scikit-learn进行线性回归分析。在实际应用中,你可能需要处理更复杂的数据集,并进行更详细的模型评估和调优。


http://www.mrgr.cn/news/64192.html

相关文章:

  • c++仿函数--通俗易懂
  • 华为 HCIP-Datacom H12-821 题库 (41)
  • 基于SpringBoot的宠物健康咨询系统的设计与实现
  • 打响反对人工智能的第一枪
  • el-data-pick 选出的时间为2024-10-22T16:00:00.000Z样子的与期待的不符合 使用value-format解决
  • IDEA修改生成jar包名字的两种方法实现
  • springboot河南旅游推荐系统-计算机毕业设计源码33358
  • DNS域名解析服务器--RHCE
  • Git本地分支更新推送到远程主分支上
  • 1231243545347ikih
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • 裸金属服务器和普通服务器的不同之处
  • 决策树算法
  • Java实战项目-基于 SpringBoot+Vue 的医院管理系统
  • Qt的程序如何打包详细教学
  • 无桥图腾柱PFC -- 基于平均电流的双闭环仿真
  • 【多模态RAG】多模态RAG ColPali实践
  • 《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析
  • 【酒店管理与推荐系统】Python+Django网页界面平台+推荐算法+管理系统网站
  • 第5章 输入/输出(I/O)管理
  • C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)
  • 食堂采购系统源码:实现供应链管理平台功能模块的技术实践
  • 5G学习笔记三之物理层、数据链路层、RRC层协议
  • 笔记整理—linux驱动开发部分(4)驱动框架
  • 一篇文章带你快速理解MySQL中的内连接和外连接
  • 如何避免使用锁时出现的死锁问题?