防止过拟合以及解决过拟合

本文转载:http://blog.sina.com.cn/s/blog_53c47a2f0102vjyf.html

                   

过拟合:为了得到一致假设而使假设变得过度复杂称为过拟合。“一个过拟合的模型试图连误差(噪音)都去解释(而实际上噪音又是不需要解释的),导致泛化能力比较差,显然就过犹不及了。” 这句话很好的诠释了过拟合产生的原因,但我认为这只是一部分原因,另一个原因是模型本身并不能很好地解释(匹配)数据,也就是说观测到的数据并不是由该模型产生的。

“统计学家说:我们让数据自己说话。言下之意就是要摒弃先验概率。而贝叶斯支持者则说:数据会有各种各样的偏差,而一个靠谱的先验概率则可以对这些随机噪音做到健壮。事实证明贝叶斯派胜利了,胜利的关键在于所谓先验概率其实也是经验统计的结果。” 事实上贝叶斯本身就是一个基于统计的模型……然而,文中以树后的箱子为例,阐述似然也有选择简单模型的倾向。我对此有疑义。似然是选择与观测最匹配的结果。根据当前的观测结果,显然一个箱子的模型是最符合观测的,也就是说,如果树两边的箱子高矮不一,颜色不同,那么两个箱子的模型就是最匹配的。因此,似然只是选择与观测最匹配的模型,而并没有选择简单模型的倾向。否则,就不会有那么严重的过拟合现象发生。文中还提到:“反之,如果背后的模型是一条直线,那么根据该模型生成一堆近似构成直线的点的概率就大得多了。” 这里的表述有问题,既然已经把模型看成是直线了,那么根据直线模型生成一堆近似构成直线的点的概率是接近1的。同理,我们既然已经认为可以用N-1阶模型去拟合,那么根据N-1阶模型生成的N个点当然就是符合N-1阶模型的,而不需要她去符合直线。 那么问题究竟应该怎样描述呢? 根据作者的意思问题应该这样来描述,一个多项式在平面上随机生成的一堆 N 个点偏偏恰好近似构成一条直线的概率很小很小,然而一条直线在平面上随机生成的一堆N个点(考虑随机误差)能拟合成一个N-1阶曲线的概率是1(一定能用一个N-1阶多项式来拟合)。换句话说,曲线上(N-1阶多项式)随机生成的点能被拟合成直线的概率接近于0,而直线上随机生成的点能被拟合成曲线的概率接近1。因此,若一堆点即能用直线去拟合,也能用N-1阶多项式拟合(必然),那么,他属于直线模型的概率更大。

二. 过拟合的产生究其原因,产生过拟合是因为:

           1.由于对样本数据,可能存在隐单元的表示不唯一,即产生的分类的决策面不唯一.随着学习的进行, BP算法使权值可能收敛过于复杂的决策面,并至极致.

         2.权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.

三.过度拟合解决方法

        1.权值衰减. 在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏

       2.适当的stopping criterion

       3.验证数据:  一个最成功的方法是在训练数据外再为算法提供一套验证数据,应该使用在验证集合上产生最小误差的迭代次数,不是总能明显地确定验证集合何时达到最小误差.Typically 30% of training patterns;Validation set error is checked each epoch;Stop training if validation error goes up

     4.Cross-validation with some patterns交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重

    k-fold交叉方法:把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。

    5. 减少特征

    人工选择,预留一些特征

   利用算法选取一些比较好的特征

   6. 正则化

这里有点疑问,正则化是为了防止过拟合还是为了解决过拟合。对部分无用的feature,定义其parameter(p3,p4)非常大,这样会导致训练结果w3,w4非常小,几乎为0,降低模型复杂度。这里也有个问题就是lamba很大会导致所有的wi都为0。矩阵分解中经常会用到。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面参考 http://www.cnblogs.com/SnakeHunt2012/archive/2013/02/18/2915957.html

训练模型是需要数据足够的,我们把训练数据看作是能量。那对于一个10次多项式的模型来说,在训练的过程中可以看做其中有10个数据的能量是用来搭建模型 的,然后剩余的数据能量是用来调整这个模型使之优良,也就是使之对训练样例全体的误差合最小。然而如果你所拥有的能量小于十个独立点的能量,也就是没有达 到建立模型的那个临界。那么你训练出来的根本就不是一个模型,用这个东西进行预测得出的结果也许就是随机数。

众 所周知,要猜一个二次多项式,需要至少三个点。要猜一个十次多项式,需要至少十一个点。我认为对于训练过程来说,每一种模型都需要一个初始的能量来确定模 型,然后剩余的能量才真是用来训练的。剩余数据越多,训练的效果越好。如果你所投入的能量不能达到这个所谓初始能量的这个临界,那么就是过拟合。

光电效应是需要溢出功的。

模 型太复杂,容易过拟合,即使可以达到过拟合临界,那么数据不足也会使得偏执比较高,但是如果数据足够的话,足够把偏执降下来的话,大模型精度是很高的,他 的方差小。如果你数据不足,就不得不使用简单模型,而简单的模型确实不容易过拟合,但他的准确度(精度)就是硬伤,偏执再底,方差他的硬伤。


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

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

相关文章

关于协方差矩阵需要注意的一个事项

协方差矩阵是衡量样本的属性(即维度)之间的关系,而不是样本与样本之间的关系。 比如有100个样本,每个样本10个属性,那么计算得到的协方差矩阵一定是10*10的,而不是100*100的,这个一定要注意。 协方差矩阵主要是为了分…

多GPU运行Deep Learning 和 并行Deep Learning(待续)

本文论述了 Deep learning运行所需的硬件配置,多GPU运行Deep Learning,设置Deep Learning的数据并行和 模型并行。详情请参考下文 http://timdettmers.com/category/hardware/ http://blog.csdn.net/jiandanjinxin/article/details/74938468

牛人主页(主页有很多论文代码)【真的好强大】

转自:http://blog.sina.com.cn/s/blog_6833a4df01012bcf.html 牛人主页(主页有很多论文代码) Serge Belongie at UC San DiegoAntonio Torralba at MITAlexei Ffros at CMUCe Liu at Microsoft Research New EnglandVittorio Ferrari at Univ…

Linux的常用经典命令(持续更新)

找工作笔试面试那些事儿(16)—linux相关知识点(1) 找工作笔试面试那些事儿(17)—linux测试题 vim编辑器操作命令大全-绝对全 - CSDN博客 Linux进阶资源 Command line one-liners the-art-of-command-line Linux工具快速教程 快乐的 Linux 命令行 Linux Tutorial UNIX Tutoria…

[C语言]为什么要有include?——从Hello World说起

本文转自:http://mp.weixin.qq.com/s?__bizMzAwOTgzNzQyMw&mid433613487&idx1&sn803995d612faadce6e4418789a6a65a8&scene2&srcid0312ElIT9UmR0ZygPGHxDxs2&fromtimeline&isappinstalled0#wechat_redirect 大家都会写的Hello World程序…

【caffe-Windows】cifar实例编译之model的使用

本文讲解如何对网上下载的一个图片利用训练好的cifar模型进行分类 第一步 上一篇文章训练好以后会得到两个文件 从网上查阅资料解释来看,第一个caffemodel是训练完毕得到的模型参数文件,第二个solverstate是训练中断以后,可以用此文件从中断…

Python 命令汇总

python 库windows安装 兵种:python程序员。 等级:二级。 攻击:较高。 防御:普通。 价格:低。 天赋:胶水,我方有c程序员时,速度可达到c程序员的80%。 天赋:成熟&…

spectral hashing--谱哈希源码解析

论文里面看到了谱哈希用来找子集的用处,不管有没有用,先转再说 原文地址:http://blog.sina.com.cn/s/blog_67914f290101d2xp.html 最近看了有关谱哈希的一些东西,记录一下备忘。理解十分粗浅,敬请各位大牛指导。 一、…

【PTVS+Theano+CPU/GPU】在windows下使用VS安装theano深度学习工具

唉。好不容易折腾完毕caffe,突然发现caffe比较适合搭建卷积神经网络,而对于DBN和LSTM的搭建好像比较麻烦,相关教程没有找到,手头上又有一个theano的代码想调试看看,所以入坑了。 准备工具: VS2013:链接&a…

人工神经网络——【BP】反向传播算法证明

第一步:前向传播 【注】此BP算法的证明仅限sigmoid激活函数情况。本博文讲道理是没错的,毕竟最后还利用代码还核对了一次理论证明结果。 关于更为严谨的BP证明,即严格通过上下标证明BP的博客请戳这里 简单的三层网络结构如下 参数定义&…

参数模型和非参数模型的区别

原文地址:http://blog.csdn.net/gao1440156051/article/details/44003051 参数与非参数模型  用代数方程、微分方程、微分方程组以及传递函数等描述的模型都是参数模型。建立参数模型就在于确定已知模型结构中的各个参数。通过理论分析总是得出参数模型。非参数模…

【matlab函数】——str2func函数的使用

官方点的叫法,在网上被称为函数句柄 用途在于,比如你定义了两个函数:strupper()用于寻找字符串的大写字母数目;strlower()用于寻找字符串的小写字母数目 现在使用str在这里面调换使用如下: funcstr;%统一前缀 myfuncstr2func(fu…

什么是NP完全问题?

本文转自:http://blog.csdn.net/xueyong4712816/article/details/6509592 NP完全问题,是世界七大数学难题之一,排在百万美元大奖的首位,够诱惑力吧!咋不求得奖只需要了解了解它是什么就可以了。 什么是NP完全问题,NPN…

【caffe-Windows】微软官方caffe之 matlab接口配置

前言 按照微软的官方地址配置可能会出现一个问题caffe_.mexw64找不到引用模块问题,或者在matlab里面压根找不到caffe_这个函数,下面会提到这两个问题。还是按照步骤来吧 【PS1】有GPU同样按照下述步骤,进行即可 【PS2】文章在matlab2013a、…

【混淆矩阵】matlab画混淆矩阵

主要借鉴此博客代码:http://blog.csdn.net/sherry_gp/article/details/50560003 但是这个博主的代码达不到我想要的效果,所以修改了一下 我想要实现的效果是:给定一列的预测标签,以及这一列标签的哪一部分理应属于哪一部分标签。…

【caffe-Windows】mnist实例编译之model的生成

其实这个和cifar的实例基本相同,只不过数据转换的方法不一样 【说明,此博客按照我自己的路径设置的相关操作,读者如果自行选择其他路径,记得在bat和prototxt等文件修改路径】 第一步 下载数据集THE MNIST DATABASE of handwrit…

吉布斯采样——原理及matlab实现

原文来自:https://victorfang.wordpress.com/2014/04/29/mcmc-the-gibbs-sampler-simple-example-w-matlab-code/ 【注】评论区有同学指出译文理论编码有误,请参考更官方的文献,个人当时仅验证过红色字体部分理论与维基百科中二位随机变量吉…

【matlab知识补充】conv2、filter2、imfilter函数原理

原文地址:http://www.ilovematlab.cn/thread-293710-1-1.html -------------------------------------conv2函数---------------------------------------- 1、用法 Cconv2(A,B,shape); %卷积滤波 复制代码A:输入图像,B:卷积核假设输入图像A大…

【matlab函数】diff函数

diff函数是用来求导数的 更新日志:2021-3-16 经评论区SHolmesCSU 指正,此函数为求解差分,而非导数。 在matlab官方文档中,利用差分近似导数需要除以步长,即 diff(X)/step_size 目前用到的调用格式为diff(A&#x…

显示mnist手写数字

前言 可视化什么的,总是好的 方法一 其实也就是用到了Ruslan Salakhutdinov and Geoff Hinton提供的工具包 % Version 1.000 % % Code provided by Ruslan Salakhutdinov and Geoff Hinton % % Permission is granted for anyone to copy, use, modify, or distr…