【Python机器学习】4.1. 过拟合(overfitting)与欠拟合(underfitting)

news/2025/4/1 4:30:00/

喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
在这里插入图片描述

4.1.1. 什么是过拟合、欠拟合

举个例子:

我们获得了某个地区在某段时间下的温度数据,但是不是连续的,而是散点的形式。我们的目标是通过这些散点来找到这段时间内的温度变化曲线

请添加图片描述

  • 左图能够大致表现出温度变化的趋势,但是与散点数据的偏差很大,就是欠拟合
  • 中间的图能够很好的表现出温度变化的过程,并且与散点数据的偏差不大,这是理想的拟合
  • 右图拟合出的曲线与散点数据的偏差值最小,但是起伏、斜率和波动很多,这在正常的气候变化中是不可能发生的,这条曲线也因此失去了通用性,这就是过拟合。

4.1.2. 过拟合和欠拟合的本质

其本质是模型不合适,导致其无法对数据实现有效的预测。

具体来说:

训练数据预测数据
欠拟合不准确不准确
过拟合准确不准确
好模型准确准确

欠拟合不论是训练数据还是预测出的数据都不准确;好模型就是都准确;过拟合会让训练数据的正确率大于等于好模型,造成过拟合的结果更好的假象,但是一旦用过拟合的模型去预测数据准确率就会低下,因为过拟合的模型失去了通用性。

欠拟合非常好判断,但是过拟合不容易判断,这篇文章的重点就在于解决过拟合问题。

4.1.3. 过拟合出现的原因和解决方案

原因:

  • 模型结构过于复杂(维度过高)
  • 使用了过多的属性,训练数据包含了干扰项信息

解决方案:

  • 简化模型结构(使用低阶模型,比如线性模型,但也不要低到欠拟合)
  • 对数据进行预处理,保留主成分信息(PCA降维)
  • 在训练模型时,增加正则化项(regulation)

前面两个解决方案都在之前的文章中介绍过了,我们着重介绍正则化项。

4.1.4. 正则化项

我们先回忆一下在线性回归理论中提到的计算损失的平方误差和(Sum of Squared Errors, SSE)函数:
J = 1 2 m ∑ i = 1 m ( y i ′ − y i ) 2 = 1 2 m ∑ i = 1 m ( a x i + b − y i ) 2 J = \frac{1}{2m} \sum_{i=1}^{m} (y'_i - y_i)^2 = \frac{1}{2m} \sum_{i=1}^{m} (a x_i + b - y_i)^2 J=2m1i=1m(yiyi)2=2m1i=1m(axi+byi)2
我们要做的就是为它增加正则化处理项:
J = 1 2 m ∑ i = 1 m ( g ( θ , x i ) − y i ) 2 + λ 2 m ∑ j = 1 n θ j 2 J = \frac{1}{2m} \sum_{i=1}^{m} (g(\theta, x_i) - y_i)^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} \theta_j^2 J=2m1i=1m(g(θ,xi)yi)2+2mλj=1nθj2
λ \lambda λ取最大值的情况下,可以约束 θ \theta θ的取值,由此有效控制各个属性数据的影响。

下图展示了在不同 λ \lambda λ数值下 θ \theta θ对结果的影响:
请添加图片描述

可以看到 λ \lambda λ越大 θ \theta θ的影响值越小,越趋进0。


http://www.ppmy.cn/news/1583203.html

相关文章

MySQL实战(尚硅谷)

要求 代码 # 准备数据 CREATE DATABASE IF NOT EXISTS company;USE company;CREATE TABLE IF NOT EXISTS employees(employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT );DESC employees;CREATE TABLE IF NOT EXISTS departments…

C++ 使用栈实现中序遍历二叉树

#include <stack> #include "iostream" using namespace std; // 假设二叉树节点定义如下 struct TreeNode { int value; TreeNode* left; TreeNode* right; TreeNode(int val) : value(val), left(nullptr), right(nullptr) {} }; typedef Tree…

thinkphp8.0\swoole的websocket应用

环境&#xff1a;centOS7.9、php8.3、thinkphp8.0\think-swoole4.1 我用的官方think-swoole插件 第一步&#xff1a;根据官方文档&#xff0c;需要安装此扩展插件 composer require topthink/think-swoole 第二步&#xff1a;在根目录下config文件夹下编辑swoole.php配置文…

适合各个层次的 7 个计算机视觉项目【1】:植物病害检测

植物病害检测 植物病害检测是计算机视觉在农业领域的一个重要应用。您将学习如何加载、处理和扩充数据集&#xff0c;构建深度神经网络模型&#xff0c;并在数据集上训练模型。该项目有助于理解图像分类&#xff0c;并通过实现早期病害检测为可持续农业做出贡献。 import os…

清晰易懂的 C++ 开发环境搭建教程

一、安装 C 编译器&#xff08;三大平台全覆盖&#xff09; 1. Windows 系统 方案一&#xff1a;MinGW-w64&#xff08;轻量推荐&#xff09; 下载 MinGW-w64&#xff1a; 访问 MinGW-w64 官网 → 下载 mingw-w64-install.exe。 安装配置&#xff1a; 架构选择&#xff1a;x…

form 表单内容序列化成一个字符串

html <form id"form1" action"http://localhost:8080/xxx" method"post"> <p >关键字1&#xff1a; <input type "text" name"keyword1" /></p> <p >关键字2&#xff1a; <input t…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…