news 2026/2/14 16:44:41

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

作者头像

张小明

前端开发工程师

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/2/12 10:22:44

通过方法参数显式传递的数据

一、核心原理 1. 数据存储结构 // 每个 Thread 对象内部都有一个 ThreadLocalMap ThreadLocal.ThreadLocalMap threadLocals null;// ThreadLocalMap 内部使用 Entry 数组&#xff0c;Entry 继承自 WeakReference<ThreadLocal<?>> static class Entry extends We…

作者头像 李华
网站建设 2026/2/8 2:35:23

基于Python+Django的车辆检测服务中心管理系统设计与实现

前言 &#x1f31e;博主介绍&#xff1a;✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发、文档编写、答疑辅导等。✌…

作者头像 李华
网站建设 2026/2/12 19:46:44

新手入门必看:Vector工具链基础操作与AUTOSAR关联

从零开始理解 Vector 工具链与 AUTOSAR 的工程实践你是不是刚接触汽车电子开发&#xff0c;面对 DaVinci、RTE、ARXML 这些术语一头雾水&#xff1f;或者已经看过不少资料&#xff0c;但始终搞不清&#xff1a;AUTOSAR 到底是怎么通过一堆工具变成实际运行的代码的&#xff1f;…

作者头像 李华
网站建设 2026/2/12 16:59:01

ST7735电源管理模块详解超详细版

ST7735电源管理深度实战&#xff1a;如何让TFT屏功耗从30mA降到2μA&#xff1f;你有没有遇到过这样的情况&#xff1f;项目快收尾了&#xff0c;测试电池续航时却发现——明明MCU已经进入Deep Sleep&#xff0c;电流也压到了几微安&#xff0c;可整机待机电流还是下不去。一查…

作者头像 李华
网站建设 2026/2/8 4:33:31

从STM32视角看CANFD和CAN的区别:通俗解释带宽差异

从STM32视角看CAN FD与经典CAN的差异&#xff1a;一场关于带宽、效率和未来的对话 你有没有遇到过这样的场景&#xff1f; 在调试一个基于STM32的电池管理系统时&#xff0c;主控MCU需要从多个从节点读取电压、温度和SOC数据。每帧只有8字节的经典CAN协议&#xff0c;逼得你不…

作者头像 李华