1、经验误差与过拟合

通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m;相应的,1-a/m称为“精度”(accuracy),即“精度=1一错误率”。更一般地,我(学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。显然,我们希望得到泛化误差小的学习器,然而,我们事先并不知样本是什么样,实际能做的是努力使经验误差最小化。

过拟合”(overfitting)与“欠拟合”(underfitting),学习器把训练样本学得太好了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会有的一般性质,这样就会导致泛化能力下降。这种现象在机器学习中称为过拟合,相对地,欠拟合是指对训练样本的一般性质尚未学好。

2、评估方法

通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。即对数据集D进行适当处理,从中产生出训练集S和测试集T。下面介绍几种常见的做法。

2.1 留出法

“留出法”(hold-out)直接将数据集D划分为两个互斥的集合,分别作为训练集S和测试集T,即D=S υ T,S ∩ T=Φ。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.2 交叉验证法

“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即,每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到,然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。通常把此过程称为“k折交叉验证”(k-fold cross validation)。

Python实现:

from sklearn.cross_validation import train_test_split
# 避免过拟合,采用交叉验证,验证集占训练集20%,固定随机种子(random_state)
train_X, test_X, train_y, test_y = train_test_split(train_dataSet,
train_label,
test_size = 0.2,
random_state = 0)

2.3 自助法

“自助法”(bootstrapping)直接以自助采样法(bootstrap sampling)为基础,它是一个很好解决在留出法和交叉验证法中,由于保留了一部分样本用于测试,导致训练样本规模不同造成影响的解决方案。采样过程为:从给定包含m个训练样本的数据集D中,有放回地抽取m个样本形成数据集D'。显然,D中有一部分样本会在D'中多次出现,而另一部分样本不出现。可以做一个简单的估计,样本在m次采用中不被采到的概率取极限是:

即通过自助采样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的没在训练集中初一的样本用于测试。这样的测试结果也称为“包外估计”(out-of-bag estimate)

自助法在数据集较小,难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差,因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

3、性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验评估方法,还要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。

3.1 错误率与精度

分类错误率定义为:

  

精度则为:

  

3.2 混淆矩阵

下图是一个二类问题的混淆矩阵,其中的输出采用了不同的类别标签

常用的衡量分类性能的指标有:

  • 正确率(Precision),它等于 TP/(TP+FP) ,给出的是预测为正例的样本中的真正正例的比例。
  • 召回率(Recall),他等于 TP/(TP+FN),给出的是预测为正例的真实正例占所有真实正例的比例。

正确率和召回率也称为查准率和查全率,它们是一对矛盾的度量。一般来说,正确率高时,召回率往往偏低,反之也是。关系如下图

3.3 ROC与AUC

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,其横轴是“假正例率”(False Positive Rate,简称FPR),纵轴是“真正例率”(True Positive Rate,简称TRP),两者分别定义为:

ROC曲线给出的是当阈值变化时假阳率和真阳率的变化情况。左下角的点所对应的是将所有样例判为反例的情况,而右上角的点对应的则是将所有样例判为正例的情况。虚线给出的是随机猜测的结果曲线。

对不同的ROC曲线进行比较的一个指标是曲线下的面积(Area Unser the Curve)。AUC给出的是分类器的平均性能值,当然它并不能完全代替对整条曲线的观察。一个完美分类器的AUC为1.0,而随机猜测的AUC则为0.5。

3.4 均方误差

回归任务最常用的性能度量是“均方误差”(mean squared error)

THE END.

机器学习实战笔记(Python实现)-07-模型评估与分类性能度量的更多相关文章

  1. 机器学习实战笔记(Python实现)-08-线性回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  2. 机器学习实战笔记(Python实现)-03-朴素贝叶斯

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  3. 机器学习实战笔记(Python实现)-02-决策树

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  4. 机器学习实战笔记(Python实现)-09-树回归

    ---------------------------------------------------------------------------------------- 本系列文章为<机 ...

  5. 机器学习实战笔记(Python实现)-05-支持向量机(SVM)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  6. 机器学习实战笔记(Python实现)-04-Logistic回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  7. 机器学习实战笔记(Python实现)-01-K近邻算法(KNN)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  8. 机器学习实战笔记(Python实现)-06-AdaBoost

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  9. 机器学习实战笔记(Python实现)-00-readme

    近期学习机器学习,找到一本不错的教材<机器学习实战>.特此做这份学习笔记,以供日后翻阅. 机器学习算法分为有监督学习和无监督学习.这本书前两部分介绍的是有监督学习,第三部分介绍的是无监督学 ...

随机推荐

  1. cocos2dx-draw绘制

    [一]:函数   //1.设置绘制颜色 1.ccDrawColor4B("红","绿","蓝","透明"); //2.设 ...

  2. 目前最火的php框架

    1.yii 作者:宗霖链接:https://www.zhihu.com/question/25023032/answer/75085250来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  3. Java之Tomcat、Dynamic web project与Servlet

    一.Tomcat配置 Conf   Config   configration   -->配置 Service.xml:用来配置Tomcat Tomcat_users.xml:用来配置Tomca ...

  4. java常用队列分析

    一.ArrayBlockingQueue 首先看一段源码: public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...

  5. Tomcat----->tomcat配置虚拟主机(搭建网站)mac

    1.首先在server.xml中添加HOST <Host name="www.snowing.com" appBase="/Users/snowing/Downlo ...

  6. Codeforces Round #425 (Div. 2))——A题&&B题&&D题

    A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...

  7. 解决:“Workbench has not been created yet” error in eclipse plugin programming”,OSGI启动控制台报错问题

    项目中使用了OSGI的框架,最近被问到OSGI框架是什么,自己表示几乎没什么认识,于是想自己手动搭建一个OSGI小例子试一试 于是在搭建过程中遇到了下面的问题:项目启动很慢而且控制台也报了很多异常出来 ...

  8. Golang&Python测试thrift

    接上篇,安装好之后,就开始编写IDL生成然后测试. 一.生成运行 参考 http://www.aboutyun.com/thread-8916-1-1.html 来个添加,查询. namespace ...

  9. JavaWeb-HttpServletResponse对象一

    web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象.resquest和response对象既然代表请求和响应,那么要 ...

  10. excel判断单元格包含指定内容的函数用=IF(COUNTIF(A1,"*内容*"),"0","1")

    前面我们聊过怎样将Excel包含某字符的单元格填充颜色,这边我们用另外一种方法来实现:excel判断单元格包含指定内容的函数 选中需要显示结果的单元格,假设我们要判断第一行第一列的单元格A1是否含有“ ...