经验损失函数

2024-06-18 18:38
文章标签 函数 损失 经验

本文主要是介绍经验损失函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.sina.com.cn/s/blog_62b0682a0101e6lp.html

1、损失函数

最简单的理解就是,给定一个实例,训练的模型对它的预测结果错了,就要受到惩罚, 因此需要定义一个量度量预测错误的程度,而损失函数就是用来衡量错误的程度。常见的损失函数有如下几类(用 机器学习笔记(二)基础知识2来表示损失函数):
假设输入是X,输出是f(X),真实值是Y。
(1)0-1损失函数(0-1 loss function)
      机器学习笔记(二)基础知识2
(2)平方损失函数(quadratic loss function)
      机器学习笔记(二)基础知识2
(3)绝对损失函数(absolute loss function)
     机器学习笔记(二)基础知识2
(4)对数损失函数(logarithmic loss function)
      机器学习笔记(二)基础知识2
2.传统的经验风险最小化
很容易看出来,损失函数越小,模型就越好,接下来用期望风险来描述模型在整个数据集上的损失,假设我们已经得到了数据的概率测度P(X,Y),那么就可以计算损失函数的期望即期望风险:
机器学习笔记(二)基础知识2
需要说明的是,这里假设数据集包含了所有可能的数据,即P(x,y)是已知的,显然这是不可能的,我们只能尽量多的获取数据集中的数据,但是不可能获得所有输入空间中的数据。有了期望风险学习的目标就确定了,即找到使期望风险最小的模型,但是就像前面说明的,全部数据的分布是未知的,那么求解期望风险的问题就是一个病态问题。那该怎么办呢,虽然我么不知道数据集的概率测度,但是我们拥有给定的一定的独立同分布的样本,因此,我们可以用模型f(x)在这个给定的样本集上的平均损失最小化来代替无法求得得期望风险最小化。
注意上面我们再一次提到了独立同分布,这样我们就不用考虑数据集的概率测度了,计算瞬间变简单了,当然,这肯定造成了一定的计算损失,但是结果还是可信的,可取的。
假设给定的数据集是: 机器学习笔记(二)基础知识2
则经验风险或经验损失函数为: 机器学习笔记(二)基础知识2
使用经验风险泛函最小的函数来逼近期望风险泛函最小的函数,这一原则成为经验风险最小化归纳原则(ERM原则)。
根据大数定律,当样本数趋于无穷大时,经验风险趋于期望风险。但是,在实际应用中,训练样本的个数是有限的,甚至还会很少,所以使用经验风险逼近期望风险的效果就不好了。
这里还涉及到一个学习理论的关键定理,该定理指出了ERM原则一致性的条件是必要的并且充分的取决于函数集中最坏的函数。这一块只要知道它指出了经验风险和期望风险的误差是有界的就行。
上面说到,对于小样本问题,经验风险效果并不理想,因为经验风险最小化容易带来过拟合现象。过拟合现象其实就是模型的选择太在意训练误差了,反而导致预测误差随着训练误差减小而增大,造成训练结果不理想。这里不再多说,可以到网上找一个多项式拟合的例子形象的理解。我也转了一篇关于过拟合的文章,解决过拟合问题是加入惩罚项或者增加数据。
3.结构风险最小化
为了解决经验风险最小化逼近引发的一系列问题,vpnik等几位大牛发展了现代的统计学习理论,提出了结构风险最小化,更加适合解决小样本问题,并且提出了寻找结构风险最小化的方法,这一套理论发展出了有名的分类器:基于VC维理论和结构风险最小化的支持向量机SVM,它能够更快更迅速的解决小样本问题,在大样本集上也有一些基于稀疏矩阵的改进方法,成为2000年来的研究热点之一。
首先要引入函数的VC维概念:
函数集Q(f)的VC维是指能够被集合中的函数以所有可能的 机器学习笔记(二)基础知识2种方式分成两类的样本的最大数目h.另一个说法是:假如存在一个有h个样本的样本集能够被函数集中的函数按照所有可能的 机器学习笔记(二)基础知识2方式分成两类,则称该函数集能把样本为h的样本集打散。VC维就是h的最大值,对于h+1,函数集就无法打乱了。对于线性函数,其VC维很简单,就是函数维数+1,。
定义N(f)代表函数集Q(f)中的函数能够把给定的样本分成多少种类,称H(f)=ln(N(f))为随机熵,描述了函数集在给定数据上的多样性,引入生长函数G(n)=ln(N(f)),则生长函数与VC维的关系为:
G(h)=hln2
G(h+1)小于(h+1)ln2
即生长函数或者是线性的,或者以对数为上界。如果函数集的生长函数是线性的,则函数集的VC维是无穷大的,因为函数集能够打散的数据集数目可以无限大,反之,如果生长函数是以参数h的对数函数为界,则函数集的VC维就是h。
VC衡量了一个函数集的复杂程度,VC维越大,函数集越复杂,虽然函数打散的样本数增加了,但是计算函数的复杂度却增加了,反而不能得到好的结果(引起过拟合),VC维越小,函数集越简单,求解速度快而且方便。支持向量机只关注对偶公示中参数不为0的支持向量的那些样本,因此VC维很小。奥卡姆剃刀原理:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的才是最好的模型。

引入VC维之后我们再去看看上面红色的部分,即经验风险和期望风险的误差是依概率有界的,通过一系列复杂的公示推导我们得到如下公式:
机器学习笔记(二)基础知识2     n为样本数,h为VC维
不等式右边第一项为经验风险,第二项为置信风险,是一个减函数,整个公示反映了经验风险和真实误差的差距上界,表征了根据经验风险最小化原则得到的模型的泛化能力。称为泛化误差上界。
上述公示表明:当样本数较大时,n/h很大,置信范围就会很小,经验风险最小化接近实际最优解,而当n/h比较小时,置信范围就会很大,经验风险最小化泛化能力就差。

结构风险=经验风险+置信风险,这部分会在SVM那一块仔细介绍。

在李航的书中讲到了模型选择两种典型方法,这里简单介绍一下:
a.正则化
正则化是结构风险最小化策略的实现,在经验风险上加一个正则化项,该项与模型复杂度相关或者模型VC维相关,复杂度越大,正则化值就越大。常用的正则化项有模型参数的范数等。
b.交叉验证
交叉验证的思想就是将训练数据集随机划分成若干个块,这些块称为训练集和验证集,训练集用于训练模型,验证集用于评判训练明星的好坏,在每一块上找到风险最小化函数,然后综合再把结果综合起来考虑。常见的交叉验证包括1/3和2/3划分,k-则交叉验证以及留一法。第一种方法取数据集的2/3进行训练,剩余1/3进行验证,第二种方法取k-1份训练,剩下一份验证,将可能的K种组合都做一次,因此共需要训练k次模型,留一法是k则交叉验证的极端情况,即K=N。

最后注意一下生成模型和判别模型的区别
生成模型更像是找到数据的组织形式,而判别模型是用实现固定好的模型模拟数据。
生成模型由数据学习到联合分布,然后求解条件概率分布,因此学习速度快且能更快的收敛到真实模型。
判别模型直接学习决策函数或条件概率,侧重于预测,因此准确率高。

这篇关于经验损失函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072796

相关文章

[职场] 护理专业简历怎么写 #经验分享#微信

护理专业简历怎么写   很多想成为一名护理方面的从业者,但是又不知道应该怎么制作一份简历,现在这里分享了一份护理方面的简历模板供大家参考。   蓝山山   年龄:24   号码:12345678910   地址:上海市 邮箱:jianli@jianli.com   教育背景   时间:2011-09到2015-06   学校:蓝山大学   专业:护理学   学历:本科

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文实际路径如下: 如果在本文路径中没有此目录,请尝试在C盘中搜索 python,搜索到相关python目录后,点击Python 3.9进入目录,

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,