西瓜书第二章(01)

今天起把西瓜书上重要的,经常用的内容简单记录一下,以防自己遗忘。

今天整理西瓜书2.1-2.4
#概念问题
学习器在训练集上表现出来的误差叫做训练误差,而在测试集上表现出来的叫做“泛化误差”

当学习器把训练样本学的太好了的时候,很可能已经把训练样本上的一些独特的特点当作了所有对象都会有的特性,这种叫做“过拟合”,与之相对的是”欠拟合“,这两种问题在机器学习中对策大不相同。

在现实生活中,我们一般对一个问题会有多种算法可供选择,甚至对同一个学习算法选择不同的参数配置也会产生不同的模型,那么我们应该怎么对模型进行评估呢,这就是机器学习中的模型选择问题。

#模型评估方法

####如何进行测试集与验证集划分
①留出法
留出法是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集,另一个作为测试集。需要注意的是划分时候要尽量保持分布的一致性,避免因为数据划分而出现的偏差。
例如在分类问题中至少要保证样本类别的比例相同,训练集中存在着500个正例,500个反例,那么测试集中应该保持与之相同如300个正例,300个反例。但是即使给出了训练/测试集样本之后仍存在着许多种划分方式,如选正例中的前500个还是后500个做为训练数据中的正例,一般使用留出法时采取的方法是多次随机划分并且最终取绝对值。
留出法还有一个问题就是如果训练集占据了大多数,那么测试数据就不够稳定准确,如果测试集占据了大多数,那么训练出来的模型可能在测试集上表现不是很好,目前一般采用2/3~4/5用作训练集,其余用作测试集。

②交叉验证法
交叉验证法是先将数据集D划分为k个大小的互斥子集,每个子集要尽量保证数据的分布一致性,也就是采取的是分层采样得到的,然后选取其中的k-1个子集做并集当作训练集,余下的一个子集当作测试集,这样可以进行k组测试以及训练,通常将这种称为k折(Kfold)验证,k一般取5,10,20,在sklearn(机器学习包)中有专门的方法来实现关于交叉验证。
k折交叉验证

和留出法存在一样的问题,k折交叉验证划分时会有不同的划分方法,为了减少因为样本不同导致出现差别,k折交叉验证通常要随即使用不同的划分重复p次,所以最终我们应该训练的模型数目应该是p*k,加入是10折且重复划分10次那么我们应该训练100个模型,k折交叉验证有一个特例是当k等于1的时候叫做留一法(Leave_One_Out),显而易见留一法不受样本划分方式的影响,但是缺点也很明显。当数据集很大的时候我们需要训练数量巨大的模型,甚至还不包括后期的参数调整。

③自助法
不管是留出法还是k折交叉验证,我们模型得到的训练数据都要比实际所有的数据要少一些,比如k折交叉验证中我们的模型训练数据是k-1个集合的并集,有什么方法可以克服呢?就是我们接下来讲到的自助法。
我们的数据集D,我们要对他进行采样产生一个大小相同的D1数据集合,如果我们进行放回抽取操作,每次取出来一个然后放回,直到两个集合数据总量相等时停止,这样的话我们就会有一些数据被重复抽取,有一些从来没有被抽取,那么他们的概率是多少呢?

有大概36.8%的数据从来没有被抽取过,我们将用没在训练集中出现的样本用于测试,这样的测试结果我们也称作”包外估计“。

自助法在数据集较小,比较难划分训练/测试集的时候很有用,而且自助法能从初始数据集中产生多个不同的训练集,这在以后我们将会学到的集成学习中很有用。我们应该知道,我们在进行采样也就是抽取值的时候没有进行分层等操作,也就是说数据会出现偏差,所以在数据量足够的时候我们还是应该用前面两种方法。

#调参与最终模型

很多初学者认为模型训练完成之后就万事大吉了,但是我们还有很多需要做的内容,比如我们需要对模型进行调参,在进行调参操作中我们会在一个范围比如[0,0.2]之间,以0.05为步长直接进行暴力搜索,看看在参数为多少的时候loss是最小的。如果有两组这样的参数我们就需要进行4*4=16组训练,工程量还是非常大的。

这里有个要注意的地方,也是我们刚开始很容易混淆的内容,就是关于数据的种类,实际上整个数据可以分为三种:测试集,验证集,训练集。测试集是我们模型在测试时候接触到的数据,这些数据都是模型第一次接触,所以对于这些数据的预测可以反映一个模型的泛化能力,而验证集以及训练集是模型在训练中遇到的,训练集就不用说了是模型拿来训练的,而验证集则是模型用来进行调参的,模型用这些数据来进行调整参数,通过这些数据的预测结果反馈给模型,模型记录下来不同参数下的预测结果好坏,最终选择最好的模型。

#性能度量
对于学习器而言,不仅要有各种实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。

回归任务采用的是一般是均方误差:
均方误差

####查准率以及查全率
我们在面对实际问题时候经常会关心如下问题,比如在信息检索中“检索出来的信息有多少是用户感兴趣的”,“用户感兴趣的信息有多少被检索出来了”,用这些来判断一个模型的好与不好,对于二分类问题,只存在正例以及反例,我们先给出混淆矩阵。
混淆矩阵

其中定义查准率以及查全率分别为
查准率以及查全率

需要注意的是,查准率以及查全率是成反比的,查准率高了那查全率要相对下降一些,查全率高了那查准率要下降一些。我们根据学习器的预测结果对样例进行排序,排在最前面的是最有可能的样本,然后把一个一个样本都当作是正例进行预测这样我们可以得到当前的混淆矩阵,然后以查全率作为横轴,查准率作为纵轴可以得到“P-R图”
P-R图

如果一个学习器把另外一个学习器的P-R图完全包住那么证明前者要优于后者,如果发生了交叉,则要具体看在哪种情况下哪种学习器更优。

查准率与查全率相等的点叫做平衡点简称BEP,谁的BEP更大则可能谁更优秀,但是只看BEP事非常简单的操作,更常用的是F1度量:
F1度量

F1 是对查准率以及查全率进行调和平均,其次还有更加普通的度量函数

调和函数
这个调和函数是对查准率以及查全率的加权平均调和。其中的参数
度量了查准率对查全率的相对重要性等于1时候退化为标准的F1度量,当他大于1时候查全率更加重要,当他小于1时候查准率更加重要

####ROC 与 AUC
如果想了解ROC曲线那么应该先了解两个函数,一个是TPR(真正例率)一个是FPR(假正例率)两者分别定义如下:
真正例率以及假正例率
画图原理和P-R图是类似的,画出如下:
ROC曲线
但是在实际情况中我们通常只有有限个测试样例来绘制ROC图,所以仅能获得有限个坐标对,绘图原理如下:给定m1个正例和m2个反例将分类阈值设置为最大则会预测所有样例均为反例,这是分别将阈值设置为点的预测值,然后连接相邻点即可。
现实绘制的ROC曲线

同样的如果一个学习器的ROC曲线完全包住了另一个学习器的ROC曲线那么前者是更好的,但是如果有交叉的话这时候可以看曲线下的面积AUC,AUC计算公式为
AUC
如果用AUC来评判模型的好坏那么决定AUC的主要是前面排序的好坏,也就是前面根据模型对样例预测值进行排序的好坏,他的排序损失函数如下图所示,其中Ⅱ()函数表示如果其中的条件为真的话返回1,如果为假的话返回0。
损失函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值