机器学习之模型选择(交叉验证)
来源:互联网 发布:mysql死锁解决方法 编辑:程序博客网 时间:2024/04/29 11:00
问题
- 模型选择问题:对于一个学习问题,可以有多种模型选择。比如要拟合一组样本点,可以使用线性回归,也可以用多项式回归。那么使用哪种模型好呢(能够在偏差和方差之间达到平衡最优)?
- 还有一类参数选择问题:如果我们想使用带权值的回归模型,那么怎么选择权重w 公式里的参数τ?
- 形式化定义:假设可选的模型集合是Μ = {M1, M2, … , Md },比如我们想分类,那么SVM、logistic回归、神经网络等模型都包含在M 中。
交叉验证(Cross validation)
- 我们的第一个任务就是要从M 中选择最好的模型。
- 假设训练集使用S 来表示
- 如果我们想使用经验风险最小化来度量模型的好坏,那么我们可以这样来选择模型:
1、 使用S 来训练每一个Mi,训练出参数后,也就可以得到假设函数hi。(比如,线性模型中得到w后,也就得到了假设函数ℎ(w).2、 选择错误率最小的假设函数。
- 遗憾的是这个算法不可行,比如我们需要拟合一些样本点,使用高阶的多项式回归肯定比线性回归错误率要小,偏差小,但是方差却很大,会过度拟合。因此,我们改进算法如下:
1、 从全部的训练数据S 中随机选择70%的样例作为训练集strain,剩余的30%作为测试集scv。2、 在strain上训练每一个Mi,得到假设函数hi。3、 在scv上测试每一个hi,得到相应的经验错误E^scv(hi).4、 选择具有最小经验错误E^scv(hi)的hi作为最佳模型。
- 这种方法称为hold-out cross validation 或者称为简单交叉验证。
- 由于测试集是和训练集中是两个世界的,因此我们可以认为这里的经验错误E^scv(hi)接近于泛化错误(generalization error)。这里测试集的比例一般占全部数据1/4-1/3。30%是典型值。
- 还可以对模型作改进,当选出最佳的模型Mi后,再在全部数据S上做一次训练,显然
训练数据越多,模型参数越准确。 - 简单交叉验证方法的弱点在于得到的最佳模型是在70%的训练数据上选出来的,不代表在全部训练数据上是最佳的。还有当训练数据本来就很少时,再分出测试集后,训练数据就太少了。
- 我们对简单交叉验证方法再做一次改进,如下:
1、 将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个子集有m/k个训练样例,相应的子集称作{S1, S2, … , Sk}。2、 每次从模型集合M中拿出来一个Mi,然后在训练子集中选择出k-1 个{S1, S2, Sj-1, Sj+1, … , Sk}(也就是每次只留下一个Sj),使用这k-1 个子集训练Mi后,得到假设函数hij。最后使用剩下的一份Sj作测试,得到经验错误E^Sj(hij).3、由于我们每次留下一个Sj(j 从1 到k),因此会得到k 个经验错误,那么对于一个Mi,它的经验错误是这k 个经验错误的平均。4、 选出平均经验错误率最小的Mi,然后使用全部的S 再做一次训练,得到最后的hi。
- 这个方法称为k-fold cross validation(k-折叠交叉验证)。说白了,这个方法就是将简单交叉验证的测试集改为1/k,每个模型训练k 次,测试k次,错误率为k 次的平均。一般讲k 取值为10。这样数据稀疏时基本上也能进行。显然,缺点就是训练和测试次数过多。
- 极端情况下,k 可以取值为m,意味着每次留一个样例做测试,这个称为leave-one-out cross validation。
- 如果我们发明了一种新的学习模型或者算法,那么可以使用交叉验证来对模型进行评价。
0 0
- 机器学习之模型选择(交叉验证)
- 模型选择之交叉验证
- 机器学习之Validation(验证,模型选择)
- R机器学习之交叉验证改善模型
- Spark2.0机器学习系列之1:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优
- 机器学习之交叉验证
- [读书笔记] 《Python 机器学习》- 使用嵌套交叉验证进行模型选择
- 机器学习:交叉验证和模型选择与Python代码实现
- 斯坦福大学机器学习笔记——当训练模型性能不好时的措施(假设评估、模型选择和交叉验证集、正则化、学习曲线)
- 机器学习之模型选择
- 斯坦福机器学习之交叉验证
- 机器学习--交叉验证
- 机器学习--交叉验证
- 机器学习-交叉验证
- 交叉验证--模型参数选择
- 机器学习——交叉验证与特征选择
- [交叉验证]机器学习中分类器的选择
- 系统学习机器学习之模型选择
- 学习了C语言有很多感悟!
- nyoj(南阳理工学院) 探 寻 宝 藏
- poj2506-Tiling(规律,大数)
- cmake学习
- JZ2440 坏块导致 nfs 方式无法下载 烧写 yaffs2 文件系统的解决办法
- 机器学习之模型选择(交叉验证)
- MFC绘图总结(2):客户区大小和DC | 求索阁+http://qiusuoge.com/10069.html(转载)
- cocos2d 移植android遇到的问题
- 虚拟机Linux与windows建立网络连接
- 黑马程序员----Java集合框架学习笔记1-List 与Set
- 初入职场感悟
- 解题报告 之 HDU5317 RGCDQ
- 改变图像的对比度和亮度
- Ubuntu之常用命令