欠拟合、过拟合、正则化、学习曲线

news2024/11/18 23:34:39

1.欠拟合、过拟合、正则化、学习曲线

1.1 欠拟合、过拟合

欠拟合:模型相对于要解决的问题来说太简单了,模型并没有拟合训练数据的状态
过拟合:模型相对于要解决的问题来说太复杂了,模型只能拟合训练数据的状态

下图来自:数据分析中的插值与拟合(2) —— 拟合

如何避免过拟合呢?

  1. 增加全部训练数据的数量
  2. 使用简单模型
  3. 正则化

1.2 正则化

正则化有L1正则化、L2正则化等

L1正则化、L2正则化区别

L1 正则化的特征是被判定为不需要的参数会变为 0,从而减少变量个数。而 L2 正则化不会把参数变为 0
L2 正则化会抑制参数,使变量的影响不会过大,而 L1 会直接去除不要的变量。

使用哪个正则化取决于要解决什么问题,不能一概而论

1.2.1 回归的L2正则化

新目标函数 = 目标函数 + 正则项
m m m为参数个数、 λ \lambda λ 是决定正则化项影响程度的正的常数
注意: θ 0 \theta_0 θ0这种只有参数的项称为偏置项,一般不对它进行正则化

通过目标函数、正则项、新目标函数的图像来看看正则化到底怎么起作用的

这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。虽然我们只考虑了 θ 1 \theta_1 θ1,但其他 θ j \theta_j θj 参数的情况也是类似的。
参数的值变小,意味着该参数的影响也会相应地变小,通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式
为了防止参数的影响过大,在训练时要对参数施加一些惩罚,而 λ \lambda λ 可以控制正则化惩罚的强度, λ \lambda λ越大,惩罚越严厉

1.2.2 包含正则项的表达式的微分





1.2.3 回归的正则化的实现

import numpy as np
import matplotlib.pyplot as plt
# 真正的函数
def g(x):
    return 0.1 * (x ** 3 + x ** 2 + x)

x = np.linspace(-2, 2, 100)
plt.plot(train_x, train_y, 'o')
plt.plot(x, g(x), linestyle = 'dashed', color= 'm')
plt.ylim(-1, 2)
plt.show()


向函数 g ( x ) g(x) g(x)中加入一些自己造的训练数据

# 随意准备一些向真正的函数加入了一点噪声的训练数据
train_x = np.linspace(-2, 2, 8)
train_y = g(train_x) + np.random.randn(train_x.size) * 0.05

标准化变量x

# 标准化
mu = train_x.mean()
sigma = train_x.std()
def standardize(x):
    return (x - mu) / sigma

train_z = standardize(train_x)

假设我们用 10 次多项式来学习这个训练数据

# 创建训练数据的矩阵
def to_matrix(x):
    return np.vstack([
        np.ones(x.size),
        x,
        x ** 2,
        x ** 3,
        x ** 4,
        x ** 5,
        x ** 6,
        x ** 7,
        x ** 8,
        x ** 9,
        x ** 10
    ]).T

X = to_matrix(train_z)
# 参数初始化
theta = np.random.randn(X.shape[1])
# 预测函数
def f(x):
    return np.dot(x, theta)

# 目标函数
def E(x, y):
    return 0.5 * np.sum((y - f(x)) ** 2)
# 正则化常量
LAMBDA = 0.5

# 学习率
ETA = 1e-4

# 误差
diff = 1

未应用正则化与应用正则化

# 重复学习(不应用正则化)
error = E(X, train_y)
while diff > 1e-6:
    theta = theta - ETA * (np.dot(f(X) - train_y, X))

    current_error = E(X, train_y)
    diff = error - current_error
    error = current_error

theta1 = theta
# 重复学习(应用正则化)
theta = np.random.randn(X.shape[1])
diff = 1
error = E(X, train_y)
while diff > 1e-6:
    reg_term = LAMBDA * np.hstack([0, theta[1:]])
    theta = theta - ETA * (np.dot(f(X) - train_y, X) + reg_term)

    current_error = E(X, train_y)
    diff = error - current_error
    error = current_error

theta2 = theta
# 绘图确认
plt.plot(train_z, train_y, 'o')
z = standardize(np.linspace(-2, 2, 100))
theta = theta1 # 未应用正则化
plt.plot(z, f(to_matrix(z)), linestyle='dashed')
theta = theta2 # 应用正则化
plt.plot(z, f(to_matrix(z)))
plt.show()

下图中绿色线为添加了正则项的,橙色线为未添加正则项的

1.2.4 逻辑回归的L2正则化



为什么突然添加负号?
反转符号是为了将最大化问题替换为最小化问题
对数似然函数本来以最大化为目标。但是,这次我想让它变成和回归的目标函数一样的最小化问题,所以加了负号。这样就可以像处理回归一样处理它,所以只要加上正则化项就可以了

1.2.5 包含正则项的表达式的微分



1.3 学习曲线(区分欠拟合和过拟合)

先来看一个例子,有10个训练数据

若我们随机挑选2个训练数据,选择一次函数模型对其进行拟合,可以看到一次函数完美拟合,误差为0

我们用这10个训练数据,选择一次函数模型对其进行拟合,可以看到一次函数并不能很好的拟合这些数据,误差已经无法为0了

模型选的太简单了,随着数据量的增加,误差逐渐变大,精度逐渐下降

用测试数据对上面这个简单模型进行评估

使用少量训练数据来训练模型,然后用测试数据评估该模型精度
然后增加训练数据来训练模型,随后用测试数据对模型进行评估,重复这样的步骤,最终能绘制出数据数量和精度的关系曲线图,展示了数据数量和精度的图称为学习曲线

欠拟合状态

图中上方曲线为使用训练数据时,数据数量与其精度的关系曲线
数据量少时,由于只有几个数据,模型可以很好的拟合这些少量数据,误差会很小,精度会很大,但由于模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降

图中下方曲线为使用测试数据时,数据数量与其精度的关系曲线
训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。

过拟合状态

随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。只对训练数据拟合得较好,这就是过拟合的特征

高偏差为欠拟合
下图来自:2022吴恩达机器学习Deeplearning.ai课程:学习曲线

高方差为过拟合
下图来自:2022吴恩达机器学习Deeplearning.ai课程:学习曲线

通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第41步 深度学习图像识别:Efficientnet建模(Tensorflow)

一、写在前面 (1)Efficientnet EfficientNet是Google在2019年提出的一种新的卷积神经网络架构,主要目标是提高模型的效率,即在保持或提高模型性能的同时,尽可能地降低模型的复杂性和计算需求。 EfficientNet的关键思…

【MySQL】表的内外连接

目录 一、内连接(表1 inner join 表2 on) 1、显示SMITH的名字和部门名称 二、外连接 1、左外连接(表名1 left join 表名2 on) 1.1查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出…

2022(一等奖)D775北部湾红树林生理结构参数对水位变化的响应特征研究

作品介绍 1 应用背景 红树林作为全球生产力最高的生态系统之一,是生长在热带、亚热带海湾的一种特殊的木本植物群落。它由于其独特的海陆过渡特性,在维持滨海生态稳定、促进海陆能量循环中起着重要作用。同时,红树林可以吸附温室气体&#x…

第十二章 EfficientNetv2网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

Python爬取数据并进行数据CRUD的Web可视化项目

项目内容简介 爬取网站https://book.douban.com/top250上面的Top250数据,然后将数据保存到Mysql数据库中,最后这些数据记录以Web的方式进行展示,并实现对这些数据记录的CRUD(增删改查)! 项目实现简介 对豆瓣网站的爬虫的实现。 见项目中的爬取豆瓣Top250脚本(beautifulSoup).…

Linux下MySQL的安装与使用

文章目录 安装前说明Linux系统及工具的准备查看是否安装过MySQLMySQL的卸载 MySQL的Linux版安装下载MySQL指定版本CentOS7下检查MySQL依赖CentOS7下MySQL安装过程 查看MySQL版本服务的初始化启动MySQL,查看状态查看MySQL服务是否自启动 MySQL登录设置远程登录 安装前…

【计算机组成原理】输入输出系统

目录 一、外部设备概述 二、输入输出接口 三、主机与外设交换信息的方式 四、中断系统 五、中断请求 六、中断响应 七、中断服务 一、外部设备概述 外部设备在计算机系统中的作用: 人机对话的重要设备(交互)完成数据媒体变换的设别&…

chatgpt赋能python:Python等待一秒-程序员必知的等待操作

Python等待一秒 - 程序员必知的等待操作 时间是宝贵的资源,你可能会需要让你的Python程序等待一段时间才能继续执行。在这篇文章中,我们将学习如何使用Python等待一秒,包括为什么需要等待,以及在Python中如何等待。 为什么需要等…

前端web入门-CSS-day07

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 定位 相对定位 绝对定位 定位居中 固定定位 堆叠层级 z-index 定位-总结 高级技巧 CSS 精灵 字…

QT(一) 安装 QT(二)GUI程序设计基础

第一章 : Qt 安装 下载地址安装 打开 cmd 运行镜像 : qt-unified-windows-x64-4.6.0-online.exe --mirror https://mirrors.aliyun.com/qt Hello 因为是qmake 所以是.proCtrl R 直接运行 第二章 GUI程序设计基础 main文件 *.ui : 有UI设计器自动生成…

操作系统02-OS结构

目录 一、概述 二、内容 三、总结 一、概述 操作系统以服务的形式向程序和用户提供执行程序的基本服务,包括用户界面、程序执行、IO操作、文件系统操作、通讯、错误监测等。 二、内容 2.1 OS服务和接口 1 操作系统服务 2 操作系统程序接口:系统调…

阿里架构师分享分布式架构笔记文档:Nginx+Redis+ZK+Kafka+MQ等

Nginx Nginx 是一款非常优秀的开源软件,工作需要,研究了很久一段时间的 Nginx 源码,在研究学习的过程中收益颇多。作为高性能服务器的代表,为了追求极致的高性能,在许多方面,Nginx 的源码实现都可以称得上…

Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟完美替代品)

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟替代品) 环境 win10pixel4Android13概览 …

JS将PDF转图片,pdfjs的使用

Hi I’m Shendi 最近做转换工具,需要将pdf转图片,这里记录下来 JS将PDF转图片,pdfjs的使用 简介 A general-purpose, web standards-based platform for parsing and rendering PDFs. 一个通用的、基于web标准的平台,用于解析和…

word公式mathtype公式

行间公式: 直接点“有编号” 内联公式: 直接点“内联” 交叉引用: 插入引用,双击编号 行内公式大小不统一,公式的代码可能上漂 解决方案:法一:切换Tex,再次切换过来。 法二&…

ElasticSearch的核心概念简单描述

我正在参加「掘金启航计划」 ES核心概念 ES是面向文档,下面表格是和关系型数据库的对比,一切都是JSON 关系数据库(Mysql)ES数据库(database)索引(indices) 和数据库一样表(tables)types 慢慢会被弃用 7.0已经过时 8.0会彻底废弃行(rows)documents (数据)文档字段(columns)fi…

简单图论+二分搜索:环境治理

题目描述 LQ 国拥有 n 个城市, 从 0 到 n−1 编号, 这 n 个城市两两之间都有且仅有 一条双向道路连接, 这意味着任意两个城市之间都是可达的。每条道路都有一 个属性 D, 表示这条道路的灰尘度。当从一个城市 A 前往另一个城市 B 时, 可 能存在多条路线, 每条路线的灰尘度定义为…

前端项目规范化:手把手教你使用prettier和pre-commit(git hook或者husky)优化规范项目代码

如何在提交代码之前,进行代码格式化检查,保证每个成员的代码都是同一个风格呢? 最简单的两种方式: 使用 prettier git pre-commit 使用 prettier husky(原理和第一种一模一样哦) 名词简介 git hooks 下图为git hooks的官方…

FcaNet: Frequency Channel Attention Networks论文总结和代码详解

论文:https://arxiv.org/abs/2012.11879 中文版:FcaNet: Frequency Channel Attention Networks 源码:https://github.com/cfzd/FcaNet或https://gitee.com/yasuo_hao/FcaNet 目录 一、论文背景和出发点 二、创新点 三、离散余弦变换&…

FastDFS-图灵

1. 分布式文件系统应用场景 互联网海量非结构化苏剧的存储需求 电商网站:海量商品图片视频网站:海量视频文件网盘:海量文件社交网站:海量图片 2.FastDFS介绍 https://github.com/happyfish100/fastdfs 2.1 简介 FastDFS是一个…