FROM:http://www.cnblogs.com/ronny/p/4063048.html

机器学习算法 原理、实现与实践——模型评估与模型选择

1. 训练误差与测试误差

机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。

假设学习到的模型是Y=f^(X),训练误差是模型Y=f^(X)关于训练数据集的平均损失:

Remp(f^)=1N∑i=1NL(yi,f^(xi))

其中N是训练样本容量。

测试误差是模型Y=f^(X)关于测试数据集的平均损失:

etest(f^)=1N′∑i=1NL(yi,f^(xi))

其中N′是测试样本容量。

当损失函数是0-1损失时,测试误差就变成了常见的测试数据集上的误差率(预测错误的个数除以测试数据的总个数)。

训练误差的大小,对判定给定问题是不是一个容易学习的问题是有意义的,但本质上不重要。测试误差反映了学习方法对未知数据集的预测能力,是学习中的重要概念。显然,给定两种学习方法,测试误差小的方法具有更好的预测能力,是更有效的方法。通常将学习方法对未知数据的预测能力称为泛化能力(generalization ability)。

2. 过拟合与模型选择

我们知道假设空间理论上有无限个模型,它们有着不同的复杂度(一般表现为参数个数的多少),我们希望选择或学习一个合适的模型。

如果一味提高对训练数据的预测能力,所选的模型的复杂度则往往会比真实模型更高。这种现象称为过拟合。过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测很好,但对未知数据预测很差的现象。

下面,以多项式函数拟合问题为例,说明过拟合与模型选择,这是一个回归问题。

现在给定一个训练数据集:

T={(x1,y1),(x2,y2),…,(xn,yn)}

其中,xi∈R是输入x的观测值,yi∈R是相应的输出y的观测值。多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很多预测能力的函数。

设M次多项式为:

fM(x,w)=w0+w1x+w2x2+⋯+wMxM=∑j=0Mwjxj

对于上面这个问题,模型的复杂度即为多项式的次数;然后在给定的模型复杂度下,按照经验风险最小化策略,求解参数,即多项式的系数,具体地,求以下经验风险最小化:

L(w)=12∑i=1N(f(xi,w)−yi)2

这时,损失函数为平方损失,系数12是为了计算方便。

我们用y=sin(x)生成10个数据点,并适当的在y值上加了一些误差,下面我们分别用0~9次多项式对数据进行拟合。

  

上图给出了M=1,M=3,M=9时多项式拟合的情况。当M=1时多项式曲线是一条直线,数据拟合效果很差。相反,如果M=9,多项式曲线通过每个数据点,训练误差为0。从对给定的训练数据拟合的角度来说,效果是最好的。但是因为训练数据本身存在噪声,这种拟合曲线对未知数据的预测能力往往并不是最好的,这时过拟合现象就会发生。

import numpy as np
import matplotlib.pyplot as plt
import random
x = np.linspace(0,1,10)
y = np.sin(2*np.pi*x)
for i in range(0,10):y[i] = y[i] + random.uniform(-0.4,0.4)
p = np.polyfit(x,y,9)
t = np.linspace(0,1.0,100)
plt.plot(x,y,'o')
plt.plot(t,np.sin(np.pi*2*t),label='$y=sin(x)$');
plt.plot(t,np.polyval(p,t),label='$y = \sum_{i=0}^Mw_ix_i,M=9,x_0=0$');
plt.legend()
plt.show()

3. 正则化与交叉验证

3.1 正则化

前面文章在介绍机器学习策略的时候,已经提到过结构风险最小化的概念。结构风险最小化正是为了解决过拟合问题来提出来的策略,它在经验风险上加一个正则化项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数的向量的范数。

正则化项可以取不同的形式。例如,回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数:

L(w)=1N∑i=1N(f(xi;w)−yi)2+λ2||w||2

这里,||w||表示参数向量w的L2范数。

正则化项也可以是参数向量的L1范数:

L(w)=1N∑i=1N(f(xi;w)−yi)2+λ||w||1

这里,||w||1表示参数向量w的L1范数。

正则化符合奥卡姆剃刀(Occam’s razor)原理。奥卡姆剃刀应用在模型选择时想法是:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂模型有较小的先验概率,简单的模型有较大的先验概率。

3.2 交叉验证

如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集、验证集和测试集。训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。

但是在许多实际应用中数据是不充分的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。

1. 简单交叉验证

首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集;然后用训练集在各种条件下训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。

2. S折交叉验证

这种方法应用最多。首先随机地将已给的数据切分为S个互不相交的大小相同的子集;然后利用其中的S-1个子集的数据训练模型,然后用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。

3. 留一交叉验证

S折交叉验证的特征情形是S=N,称为留一交叉验证,往往在数据缺乏的情况下使用。这里,N是给定数据集的容量。

4. 泛化能力

学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。现实中采用最多的办法是通过测试数据集的误差来评价学习方法的泛化能力。但是因为数据是有限的,并不能代表全体未知样本,所以很有可能按照这样评价到得的结果是不可靠的。

下面我们从理论上对学习方法的泛化能力进行分析。

首先给出泛化误差的定义。如果学习到的模型是f^,那么用这个模型对未知数据预测的误差即为泛化误差(generalization error)

Rexp(f^)=EP[L(Y,f^(X))]=∫X×YL(y,f^(x))P(x,y)dxdy

泛化误差反映了学习方法的泛化能力,如果一种方法学习的模型比另一种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,泛化误差就是所学习到的模型的期望风险。

而我们知道数据的联合分布函数我们是不知道的,所以实际中,学习方法的泛化能力分析往往是通过研究泛化误差的概率上界进行的,简称泛化误差上界(generalization error bound)。具体来说,就是通过比较两种学习方法的泛化误差上界的大小来比较它们的优劣。

对二分类问题,当假设空间有有限个函数的集合F=f1,f2,…,fd时,对任意一个函数f∈F,至少以概率1−δ,以下不等式成立:

R(f)≤R^(f)+ε(d,N,δ)

其中,ε(d,N,δ)=12N(logd+log1δ)−−−−−−−−−−−−−−√

不等式左边R(f)是泛化误差,右端即为泛化误差的上界。R^(f)为训练误差。

ML 04、模型评估与模型选择相关推荐

  1. 第六课.模型评估与模型选择

    目录 导语 模型评估 回归任务的评估指标 分类任务的评估指标 过拟合现象 过拟合的原因 过拟合解决办法 模型选择与调整超参数 正则化 留出法 交叉验证 网格搜索 实验:线性回归预测股票走势 实验说明 ...

  2. ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)

    ML之回归预测:利用Lasso.ElasticNet.GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集[12+1]进行回归预测(模型评估.模型推理) 目录 ...

  3. [MachineLearning]模型评估与模型选择

    机器学习的目的是使学到的模型不仅能对已知数据而且还要对位置数据都有很好的预测能力,这种模型适用于新样本的能力,称为 泛化能力(generalization). 而模型评估与模型选择就是为了让模型具有更 ...

  4. 模型评估与模型选择(训练误差和测试误差+过拟合)| 15mins 入门 | 《统计学习方法》学习笔记(四)

    模型评估与模型选择 当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准. 训练误差的大小,对判定给定的问 ...

  5. python模型评估_模型评估知识点总结及Python实现

    目录 1.概述 2.分类评估--混淆矩阵 3.分类评估--ROC.AUC.提升图与KS图 4.回归评估 5.非监督评估 正文 1.概述 数据集输入到一个模型中,然后再进行输出,我们可以得到模型的输出结 ...

  6. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)

    R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图.混淆矩阵.Accuray.Precision.Recall.ROC.AUC).PRTPlot函数可视化获取logistic ...

  7. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  8. 【统计学习方法】模型评估与模型选择

    一.训练误差与测试误差 首先引入误差的概念,误差(error)是指:学习器的实际预测输出与样本的真实输出之间的差异.类似地,学习器在训练集上的误差被称之为训练误差(training error)或者经 ...

  9. 机器学习系列之coursera week 1 Introduction 以及模型评估

    目录 前言 1.coursera week 1 review 1.1 Introduction 1.2 Model and cost function 1.3 Parameter learning 2 ...

最新文章

  1. 有关 HashMap 面试会问的一切
  2. 浅析网站域名申请注册的四种常见方式
  3. 前端开发代码架构相关想法
  4. 关于Unity中Shader的内置值
  5. MassTransit - .NET Core 的分布式应用程序框架
  6. 用Emacs编写mybatis
  7. java栈的内存_JVM的栈内存
  8. Leetcode每日一题:26.remove-duplicates-from-sorted-array(删除排序数组中的重复项)
  9. native层 安卓_安卓逆向学习入门之过反调试(一)
  10. [label][paypal] Paypal 支付页面的语言显示问题
  11. 学习总结-《父与子的编程之旅》chapter 10
  12. 软件安全课程设计:高校科研管理系统
  13. 一位全减器VHDL语言
  14. 人人都是产品经理 读后感
  15. 新的博客,新的开始。
  16. 优雅编程之阿里巴巴开发规范分享及扩展学习(三十八)
  17. 怎样才能在网上卖东西,手把手教你闲鱼卖货!
  18. excel中#N/A的解释同比环比基比画四象限图的小tips字符串截取函数substitute的深入理解
  19. 谈谈红楼梦(第16-18回)
  20. U盘中毒了,里面重要的文件夹不见了怎么办?

热门文章

  1. Linux中如何将文件dump成16进制值
  2. WebService大讲堂之Axis2(4):二进制文件传输
  3. 浅谈 PodDisruptionBudgets
  4. php 华为语音通话,语音通知API_语音通话 VoiceCall_API参考_语音通知API_华为云
  5. acwing算法题--01背包问题
  6. Linux下gcc编译中关于头文件与库文件搜索路径相关问题
  7. Azure实践之automation自动整理资产信息
  8. tensorflow(4)踩过的一些坑
  9. 聊聊 Redis 使用场景
  10. C# Note27: GetHashCode方法