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

【机器学习基础】机器学习入门核心算法:线性回归(Linear Regression)

在这里插入图片描述

机器学习入门核心算法:线性回归(Linear Regression)

    • 1. 算法逻辑
    • 2. 算法原理与数学推导
    • 3. 评估指标
    • 4. 应用案例
    • 5. 面试题
    • 6. 扩展分析
    • 总结

1. 算法逻辑

  • 核心思想
    通过线性方程拟合数据,最小化预测值与真实值的误差平方和,解决回归问题。
    示例:根据房屋面积和房间数量预测房价。

  • 算法流程

    1. 初始化模型参数(权重 θ \theta θ 和偏置 θ 0 \theta_0 θ0)。
    2. 计算预测值 y ^ = θ T X + θ 0 \hat{y} = \theta^T X + \theta_0 y^=θTX+θ0
    3. 计算损失函数(均方误差,MSE)。
    4. 通过梯度下降更新参数,最小化损失。
    5. 重复步骤2-4直至收敛。

2. 算法原理与数学推导

  • 数学基础
    基于最小二乘法,通过优化均方误差损失函数求解最优参数。

  • 关键公式推导

    • 假设函数
      h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T X h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n = \theta^T X hθ(x)=θ0+θ1x1+θ2x2++θnxn=θTX
    • 损失函数(MSE)
      J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
    • 梯度下降更新规则
      θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θjαθjJ(θ)
      其中:
      ∂ J ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θjJ=m1i=1m(hθ(x(i))y(i))xj(i)
      • 对偏置项 θ 0 \theta_0 θ0
        ∂ J ∂ θ 0 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J}{\partial \theta_0} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) θ0J=m1i=1m(hθ(x(i))y(i))
  • 闭式解(正规方程)
    当特征矩阵 X X X 可逆时,直接求解:
    θ = ( X T X ) − 1 X T y \theta = \left( X^T X \right)^{-1} X^T y θ=(XTX)1XTy

  • 超参数说明

    超参数作用示例值
    学习率 α \alpha α控制参数更新步长0.01
    迭代次数决定训练终止条件1000

3. 评估指标

指标公式特点
均方误差 (MSE) 1 m ∑ i = 1 m ( y i − y ^ i ) 2 \frac{1}{m} \sum_{i=1}^m \left( y_i - \hat{y}_i \right)^2 m1i=1m(yiy^i)2对异常值敏感,数值越小越好
平均绝对误差 (MAE)$$\frac{1}{m} \sum_{i=1}^m \lefty_i - \hat{y}_i \right
决定系数 ( R 2 R^2 R2) 1 − ∑ i = 1 m ( y i − y ^ i ) 2 ∑ i = 1 m ( y i − y ˉ ) 2 1 - \frac{\sum_{i=1}^m \left( y_i - \hat{y}_i \right)^2}{\sum_{i=1}^m \left( y_i - \bar{y} \right)^2} 1i=1m(yiyˉ)2i=1m(yiy^i)2越接近1表示模型解释力越强

4. 应用案例

  • 经典场景

    • 波士顿房价预测:根据房屋特征(房间数、犯罪率等)预测房价中位数。
    • 销售额预测:基于广告投入(电视、报纸、广播)预测产品销售额。
  • 实现代码片段

    # 使用Scikit-learn实现
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_squared_error, r2_score# 训练模型
    model = LinearRegression()
    model.fit(X_train, y_train)# 预测与评估
    y_pred = model.predict(X_test)
    print("MSE:", mean_squared_error(y_test, y_pred))
    print("R²:", r2_score(y_test, y_pred))# 输出参数
    print("权重:", model.coef_)
    print("偏置:", model.intercept_)
    

5. 面试题

  • 理论类问题
    Q1:线性回归的假设条件是什么?
    答案

    1. 线性关系:特征与目标变量呈线性关系。
    2. 误差独立同分布:残差服从均值为0的正态分布,且相互独立。
    3. 同方差性:残差的方差恒定。
    4. 无多重共线性:特征之间不存在高度相关性。

    Q2:梯度下降和正规方程的区别是什么?
    答案

    • 梯度下降:迭代优化,适合大规模数据(时间复杂度 O ( m n 2 ) O(mn^2) O(mn2)),需调学习率。
    • 正规方程:直接求解解析解,适合小规模数据(时间复杂度 O ( n 3 ) O(n^3) O(n3)),要求 X T X X^T X XTX 可逆。
  • 编程类问题
    Q3:手写梯度下降实现线性回归

    def linear_regression_gd(X, y, alpha=0.01, epochs=1000):m, n = X.shapetheta = np.zeros(n)for _ in range(epochs):y_pred = X.dot(theta)error = y_pred - ygradient = (1/m) * X.T.dot(error)theta -= alpha * gradientreturn theta
    

6. 扩展分析

  • 算法变种

    变种改进点适用场景
    岭回归 (Ridge)加入L2正则化,防止过拟合特征多重共线性较强时
    Lasso回归加入L1正则化,自动特征选择高维稀疏数据
  • 与其他算法对比

    维度线性回归决策树回归
    可解释性高(权重明确)中等(树结构可解释)
    非线性拟合能力弱(需手动特征工程)强(自动处理非线性)
    训练速度快(闭式解或简单迭代)中等(需构建树结构)

总结

线性回归是机器学习入门核心算法,需重点掌握:

  1. 数学推导:损失函数、梯度下降、正规方程。
  2. 应用限制:假设条件不满足时(如非线性关系),需改用多项式回归或树模型。
  3. 面试考点:从理论假设到代码实现的全链路理解。
http://www.xdnf.cn/news/8126.html

相关文章:

  • 课外知识:Python方法绑定机制与装饰器传参详解 与 实战
  • 力扣HOT100之二叉树:105. 从前序与中序遍历序列构造二叉树
  • std::initialzer_list 与花括号{}数据列表
  • 实现一个前端动态模块组件(Vite+原生JS)
  • Springboot安全策略Spring Security
  • LeetCode Hot100(滑动窗口)
  • 手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)
  • 【Java多线程】JUC其他常用组件
  • (视觉)分类、检测与分割在不同网络中的设计体现
  • LeetCode 滑动窗口问题 - 核心限制条件总结 (基于灵茶山艾府分类 - 详尽版)
  • Java集合再探
  • Linux LVM管理
  • 整平机:工业制造中的关键设备
  • Linux 输出输入重定向、tee命令详解
  • 高等数学-极限
  • OceanBase数据库全面指南(函数篇)函数速查表
  • 区分:union(),coalesce () 和 repartition ()
  • ProtoBuffer在Android端的编译
  • 网络编程 之网络七层模型、TCPUDP协议、JAVA IO 发展历程
  • 【2025-05-22】centos 离线安装兼容node和npm版本的pm2 和 yarn
  • 2025软考高级信息系统项目管理师英文选择题---技术类常见英语词汇
  • python 绘制3D平面图
  • 【记录】PPT|PPT打开开发工具并支持Quicker VBA运行
  • NLP学习路线图(四):Python编程语言
  • 从零开始:用Python语言基础构建宠物养成游戏:从核心知识到完整实战
  • 高速信号处理中的去加重、预加重与均衡技术
  • CUDA 加速的稀疏矩阵计算库cuSPARSE
  • 自动获取ip地址安全吗?如何自动获取ip地址
  • 【Day33】
  • 【项目】抽奖系统bug历程(持续更新)