模型评估和模型选择
1、损失函数对于模型一次预测结果的好坏需要有一个度量标准。对于监督学习而言给定一个输入X选取的模型就相当于一个“决策函数”f它可以输出一个预测结果f(X)而真实的结果标签记为Y。f(X) 和Y之间可能会有偏差我们就用一个损失函数loss function来度量预测偏差的程度记作 L(Y,f(X))。损失函数用来衡量模型预测误差的大小损失函数值越小模型就越好损失函数是f(X)和Y的非负实值函数0-1损失函数平方损失函数使用最多方便求导绝对损失函数对数似然损失函数2、经验误差给定一个训练数据集数据个数为n根据选取的损失函数就可以计算出模型f(X)在训练集上的平均误差称为训练误差也被称作经验误差empirical error 或经验风险empirical risk。类似地在测试数据集上平均误差被称为测试误差或者泛化误差generalization error。一般情况下对模型评估的策略在训练的时候就是考察经验误差当经验风险最小时就认为取到了最优的模型。这种策略被称为 经验风险最小化empirical risk minimizationERM。3、欠拟合和过拟合拟合Fitting是指机器学习模型在训练数据上学习到规律并生成预测结果的过程就是尽可能地符合原始数据的分布情况接下来根据这个结果去预测数据。理想情况下模型能够准确地捕捉训练数据的模式并且在未见过的新数据测试数据上也有良好的表现即模型具有良好的泛化能力。欠拟合Underfitting是指模型在训练数据上表现不佳无法很好地捕捉数据中的规律。这样的模型不仅在训练集上表现不好在测试集上也同样表现差。过拟合Overfitting是指模型在训练数据上表现得很好但在测试数据或新数据上表现较差的情况。过拟合的模型对训练数据中的噪声或细节过度敏感把噪声学会了哈哈哈把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质从而失去了泛化能力。产生欠拟合和过拟合的根本原因是模型的复杂度过低或过高从而导致测试误差泛化误差偏大。欠拟合模型在训练集和测试集上误差都比较大。模型过于简单高偏差。过拟合模型在训练集上误差较小但在测试集上误差较大。模型过于复杂高方差。3.1、产生原因和解决办法欠拟合产生原因模型复杂度不足模型过于简单无法捕捉数据中的复杂关系。特征不足输入特征不充分或者特征选择不恰当导致模型无法充分学习数据的模式。训练不充分训练过程中迭代次数太少模型没有足够的时间学习数据的规律。过强的正则化正则化项设置过大强制模型过于简单导致模型无法充分拟合数据。解决办法增加模型复杂度选择更复杂的模型。增加特征或改进特征工程添加更多的特征或通过特征工程来创造更有信息量的特征。增加训练时间增加训练的迭代次数让模型有更多机会去学习。减少正则化强度如果使用了正则化尝试减小正则化的权重以让模型更灵活。过拟合产生原因模型复杂度过高模型过于复杂参数太多。训练数据不足数据集太小模型能记住训练数据的细节但无法泛化到新数据也可能出现欠拟合的现象。特征过多特征太多模型可能会“记住”数据中的噪声而不是学到真正的规律。训练过长训练时间过长导致模型学习到训练数据中的噪声而非数据的真正规律。解决办法减少模型复杂度降低模型的参数数量、使用简化的模型或降维来减小模型复杂度。增加训练数据收集更多数据或通过数据增强来增加训练数据的多样性。使用正则化引入L1、L2正则化避免过度拟合训练数据。交叉验证使用交叉验证技术评估模型在不同数据集上的表现以减少过拟合的风险。早停训练时当模型的验证损失不再下降时提前停止训练避免过度拟合训练集。import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 设置matplotlib全局中文显示 plt.rcParams[font.sans-serif] [KaiTi] plt.rcParams[axes.unicode_minus] False # 由一个向量x生成degree列的矩阵 def polynomial(x, degree): 构成多项式返回 [x^1,x^2,x^3,...,x^n] return np.hstack([x ** i for i in range(1, degree 1)]) # 1、读取数据 # 生成一个从 -3 到 3 的等差数列共300个点然后将其转换成一个 300 行、1 列的列向量二维数组 X np.linspace(-3, 3, 300).reshape(-1, 1) print(X.shape) y np.sin(X) np.random.uniform(-0.5, 0.5, 300).reshape(-1, 1) # 创建一个包含 1 行、3 列子图的画布 fig, ax plt.subplots(1, 3, figsize(15, 4)) ax[0].plot(X, y, yo) ax[1].plot(X, y, yo) ax[2].plot(X, y, yo) # 划分训练集和测试集 x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 创建线性回归模型创建对象 model LinearRegression() # 欠拟合1次多项式 x_train1 x_train x_test1 x_test model.fit(x_train1, y_train) y_pred1 model.predict(x_test1) ax[0].plot(X, model.predict(X), r) ax[0].text(-3, 1, f测试集均方误差{mean_squared_error(y_test, y_pred1):.4f}) ax[0].text(-3, 1.3, f训练集均方误差{mean_squared_error(y_train, model.predict(x_train1)):.4f}) ax[0].set_title(欠拟合(1次多项式)) plt.show() # 适度拟合5次多项式 x_train2 polynomial(x_train, 5) # 扩展成5个特征 x_test2 polynomial(x_test, 5) model.fit(x_train2, y_train) y_pred2 model.predict(x_test2) ax[1].plot(X, model.predict(polynomial(X, 5)), r) ax[1].text(-3, 1, f测试集均方误差{mean_squared_error(y_test, y_pred2):.4f}) ax[1].text(-3, 1.3, f训练集均方误差{mean_squared_error(y_train, model.predict(x_train2)):.4f}) ax[1].set_title(适度拟合(5次多项式)) # plt.show() # 过拟合20次多项式 x_train3 polynomial(x_train, 20) x_test3 polynomial(x_test, 20) model.fit(x_train3, y_train) y_pred3 model.predict(x_test3) ax[2].plot(X, model.predict(polynomial(X, 20)), r) ax[2].text(-3, 1, f测试集均方误差{mean_squared_error(y_test, y_pred3):.4f}) ax[2].text(-3, 1.3, f训练集均方误差{mean_squared_error(y_train, model.predict(x_train3)):.4f}) ax[2].set_title(过拟合(20次多项式)) # plt.tight_layout() plt.show()4、正则化正则化是指在机器学习的过程中通过添加额外项来惩罚过大的参数进而限制模型的复杂度避免出现过拟合提高模型的泛化能力。这里的是正则化系数用来表示惩罚项的权重。正则化系数不属于模型的参数无法通过训练学习得到需要在模型训练开始之前手动设置这种参数被称为“超参数”。4.1、L1正则化L1正则化在损失函数中加入参数的绝对值之和L1正则化通过惩罚模型参数的绝对值使得部分权重趋近0甚至变为0。这会导致特征选择即模型会自动“丢弃”一些不重要的特征。L1正则化有助于创建稀疏模型即许多参数为0。在解决回归问题时使用L1正则化也被称为“Lasso回归”。超参数控制着正则化的强度。较大的值意味着强烈的正则化会使模型更简单可能导致欠拟合。而较小的值则会使模型更复杂可能导致过拟合。4.2、L2正则化L2正则化在损失函数中加入参数的平方之和L2正则化通过惩罚模型参数的平方使得所有参数都变得更小但不会将参数强行压缩为0。它会使得模型尽量平滑从而防止过拟合。在解决回归问题时使用L2正则化也被称为“岭回归”。5、交叉验证交叉验证Cross-Validation是一种评估模型泛化能力的方法通过将数据集划分为多个子集反复进行训练和验证以减少因单次数据划分带来的随机性误差。通过交叉验证能更可靠地估计模型在未知数据上的表现。亦能避免因单次数据划分不合理导致的模型过拟合或欠拟合。5.1、简单交叉验证将数据划分为训练集和验证集如70%训练30%验证。结果受单次划分影响较大可能高估或低估模型性能。5.2、k折交叉验证将数据均匀分为k个子集称为“折”每次用k−1折训练剩余1折验证重复k次后取平均性能。充分利用数据结果更稳定。

相关新闻

集团企业必看!国内知名ERP厂商精选榜单发布

集团企业必看!国内知名ERP厂商精选榜单发布

一、引言 2026年上半年国内企业数字化管理软件市场持续迭代,赛迪顾问最新行业数据显示,国内ERP市场整体规模达326.8亿元,国产厂商市场占比提升至76.2%,本土软件的技术适配性、落地实用性已全面适配国内企业经营管理需求。在企业管…

2026/9/25 22:56:24 阅读更多 →
51单片机从零到实战(13)——毕设常用ADC模块

51单片机从零到实战(13)——毕设常用ADC模块

第 13 篇:ADC 模数转换——让单片机"感知"模拟世界 温度、光线、声音、电压——这些是连续的"模拟量"。ADC 把它们变成单片机懂的"数字量"。STC89C52 没有内置 ADC,我们用 PCF8591 模块(I2C 接口,5…

2026/9/30 15:29:15 阅读更多 →
Recruiter初筛到底在判断什么?|蒸汽求职分享

Recruiter初筛到底在判断什么?|蒸汽求职分享

**摘要:**招聘人员初筛时间通常不长,却不只是核对简历。候选人与岗位是否基本匹配、求职方向是否清楚、表达是否容易理解,以及入职时间、地点、工作资格和薪资等现实条件,都可能影响是否进入下一轮。 不少留学生准备面试时&#x…

2026/10/10 21:19:07 阅读更多 →

最新新闻

Unity2D弹球游戏可运行完整项目:物理引擎+碰撞+UI闭环实现

Unity2D弹球游戏可运行完整项目:物理引擎+碰撞+UI闭环实现

简介:这是一份面向Unity初学者与2D游戏开发入门者的可运行完整项目,聚焦弹球游戏核心逻辑实现,帮助开发者掌握不依赖物理引擎的2D运动控制、碰撞检测、挡板交互、得分系统及UI状态管理等关键技能。资源包含432个文件,以128个info配…

2026/10/14 14:38:54 阅读更多 →
零基础网页制作入门:HTML与CSS实战指南

零基础网页制作入门:HTML与CSS实战指南

1. 项目概述与核心思路拆解 1.1 这个项目到底在解决什么问题 先说结论:创建简单网页教学这个方向,本质上是帮那些完全不了解前端的人,用最短的时间建立起对网页制作的基本认知和动手能力。很多人觉得做网页是程序员的专属技能,一…

2026/10/14 14:38:54 阅读更多 →
Kubernetes CronJob执行延迟排查:从控制器到节点侧的关键链路与优化

Kubernetes CronJob执行延迟排查:从控制器到节点侧的关键链路与优化

告警一夜之间刷了十几条:原本应该准点 1:00 执行的 CronJob,实际跑到 1:37 才从 Pod 里打出第一批日志。我盯着“执行延迟”三个字想了很久,最初以为是容器时间不同步,后来才发现问题根本不在 CronJob 控制器,而在调度…

2026/10/14 14:38:54 阅读更多 →
MySQL SELECT与SHOW实战:从基础查询到性能排查的完整指南

MySQL SELECT与SHOW实战:从基础查询到性能排查的完整指南

从接触数据库开始,大多数人的第一条SQL都是SELECT,而SHOW往往是那个“我知道它存在,但很少深入研究”的兄弟命令。这个主题虽然叫“简单检索”,但SELECT和SHOW几乎撑起了日常数据库操作的半边天:前者负责从一张或多张表…

2026/10/14 14:38:54 阅读更多 →
主成分分析PCA从原理到实战:高维数据降维的核心技术解析

主成分分析PCA从原理到实战:高维数据降维的核心技术解析

很多人在刚开始接触数据分析时,面对几十个甚至上百个特征,第一反应往往是茫然。画出来的散点图矩阵密密麻麻,算出来的相关系数表让人眼花缭乱,跑出来的模型又总被多重共线性拖后腿。这时候,主成分分析(PCA&…

2026/10/14 14:38:54 阅读更多 →
Pandas线性插值实战:空气质量数据异常值与缺失值处理

Pandas线性插值实战:空气质量数据异常值与缺失值处理

这段时间帮某个环境监测项目处理城市空气质量数据,遇到最多的不是模型效果差,而是数据本身的问题。一套PM2.5、PM10、NO2、SO2浓度数据拿过来,缺失值、异常值、重复记录混在一起,直接建模结果根本没法看。把这些数据清洗干净&…

2026/10/14 14:37:53 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →