news 2026/4/18 13:04:14

线性回归是机器学习中最基础的算法之一,用于建立输入变量(特征)与输出变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性回归是机器学习中最基础的算法之一,用于建立输入变量(特征)与输出变量

线性回归原理与代码实现

线性回归是机器学习中最基础的算法之一,用于建立输入变量(特征)与输出变量(目标)之间的线性关系。以下是其核心原理及Python实现。

数学原理

线性回归模型表示为:
$y = wX + b$
其中:

  • $y$ 是预测值
  • $X$ 是输入特征矩阵
  • $w$ 是权重(斜率)
  • $b$ 是偏置项(截距)

目标是最小化损失函数(均方误差):
$L = \frac{1}{N}\sum_{i=1}^N (y_i - (wX_i + b))^2$

代码实现
import numpy as np class LinearRegression: def __init__(self): self.w = None # 权重 self.b = None # 偏置 def fit(self, X, y, learning_rate=0.01, epochs=1000): # 初始化参数 n_samples, n_features = X.shape self.w = np.zeros(n_features) self.b = 0 # 梯度下降 for _ in range(epochs): y_pred = np.dot(X, self.w) + self.b # 计算梯度 dw = (1/n_samples) * np.dot(X.T, (y_pred - y)) db = (1/n_samples) * np.sum(y_pred - y) # 更新参数 self.w -= learning_rate * dw self.b -= learning_rate * db def predict(self, X): return np.dot(X, self.w) + self.b
使用示例
# 生成示例数据 X = np.array([[1], [2], [3], [4]]) y = np.array([2, 4, 6, 8]) # 训练模型 model = LinearRegression() model.fit(X, y) # 预测 print(model.predict(np.array([[5]]))) # 输出接近10
关键点说明
  • 梯度下降:通过迭代调整参数使损失函数最小化
  • 学习率:控制参数更新步长,过大可能无法收敛,过小收敛慢
  • 特征缩放:在实际应用中建议对特征做标准化处理
扩展建议
  • 添加正则化(L1/L2)防止过拟合
  • 实现批量梯度下降/随机梯度下降变体
  • 添加模型评估指标(如R²分数)

这段代码完整实现了线性回归的核心逻辑,包含训练和预测功能,适合初学者理解算法本质。实际应用时可结合Scikit-learn等库进行优化。

公式解析

该公式表示均方误差损失函数(Mean Squared Error, MSE),常用于回归问题的模型训练中,用于衡量模型预测值与真实值之间的差异。

  • 符号说明
    • $N$:样本数量。
    • $y_i$:第 $i$ 个样本的真实值。
    • $X_i$:第 $i$ 个样本的特征向量。
    • $w$:模型权重参数(可能是标量或向量,取决于 $X_i$ 的维度)。
    • $b$:偏置项(截距)。
    • $wX_i + b$:模型的线性预测值。

数学意义

公式计算所有样本的预测误差平方的平均值:

  1. 对每个样本,计算预测值 $wX_i + b$ 与真实值 $y_i$ 的差值。
  2. 对差值取平方,消除正负影响并放大较大误差。
  3. 对所有样本的平方误差求和并除以样本数 $N$,得到平均误差。

代码实现(Python)

import numpy as np def mean_squared_error(y_true, y_pred): """ 计算均方误差损失 :param y_true: 真实值数组,形状 (N,) :param y_pred: 预测值数组,形状 (N,) :return: MSE 标量值 """ return np.mean((y_true - y_pred) ** 2) # 示例用法 y_true = np.array([3, 5, 7]) y_pred = np.array([2.5, 5.1, 7.8]) mse = mean_squared_error(y_true, y_pred) print(f"MSE: {mse:.4f}")


优化目标

在训练中,通过调整 $w$ 和 $b$ 最小化 $L$:

  • 使用梯度下降等优化算法,计算 $L$ 对 $w$ 和 $b$ 的偏导数:
    • $\frac{\partial L}{\partial w} = -\frac{2}{N}\sum_{i=1}^N X_i(y_i - (wX_i + b))$
    • $\frac{\partial L}{\partial b} = -\frac{2}{N}\sum_{i=1}^N (y_i - (wX_i + b))$
  • 迭代更新参数直至收敛。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:34:01

在GIS中使用ggplot2绘制坐标点和Shapefile

在地理信息系统(GIS)中,常见的一个需求是将坐标点绘制在地图上。这不仅可以帮助我们可视化数据分布,也能对数据进行空间分析。本文将通过一个具体的实例,展示如何在R语言中使用ggplot2包结合sf包,将坐标数据点绘制在Shapefile之上。 背景介绍 假设我们有以下情况: 坐标…

作者头像 李华
网站建设 2026/4/18 11:32:34

深度解析:AI提示系统技术架构中的多轮对话管理设计

深度解析:AI提示系统技术架构中的多轮对话管理设计 摘要/引言 在当今人工智能飞速发展的时代,AI提示系统广泛应用于聊天机器人、智能客服等诸多场景。多轮对话管理作为AI提示系统技术架构的关键组成部分,直接影响着用户体验和系统的实用性。本…

作者头像 李华
网站建设 2026/4/18 6:39:06

基于云平台的手机远程控制LED屏系统构建

手机远程控制LED屏?这套云架构方案让运维效率翻倍!你有没有遇到过这样的场景:城市多处的广告大屏需要紧急更换内容,但每块屏幕都得派人现场操作;或是连锁门店的滚动字幕想统一更新促销信息,却因为分布太广而…

作者头像 李华
网站建设 2026/4/18 12:30:16

01. C++是如何工作的

1.C是如何工作的 2.编译 3.链接1.C是如何工作的 a.预处理编译器收到源文件后, 一看到这条语句, 就先处理这些语句, 在实际编译发生前就处理这些语句常见的预处理语句: #include, #define, #if def #pragma#include找到这个文件, 将这个文件的所有内容拷贝到现在的文件b.当预处理…

作者头像 李华
网站建设 2026/4/18 7:41:38

Keil5下C程序编译错误排查:深度剖析常见问题

Keil5下C程序编译错误排查:从“红字满屏”到一键构建成功的实战指南你有没有过这样的经历?写完一段自认为逻辑完美的代码,信心满满地点击Build,结果“Build Output”窗口瞬间弹出十几条红色错误信息——identifier not defined、f…

作者头像 李华