我与西瓜书1-----绪论,模式评估与选择

 第1章 绪论

  若我们欲预测的是离散值,如“好瓜”“坏瓜”,此类学习任务称为分类(classification);若欲预测的是连续值,例如西瓜的成熟度0.95,0.37,此类学习任务称为回归(regression)。对只涉及两个类别的“二分类(binary classification)”任务,通常称其中一个为正类(positive class),另一个为反类(negative class)。涉及到多个类别时,则称为“多分类(multi-class classification)”。

  我们还可以对西瓜做“聚类(clustering)”,即将训练集中的西瓜分成若干组,每组称为一个“簇(cluster)”;这些自动形成的簇可能对应一些潜在的概念划分,例如“本地瓜”“外地瓜”,“浅色瓜”和“深色瓜”。这样的学习过程有组于我们了解数据内在的规律,更能为深入地分析数据建立基础。在聚类学习中,“浅色瓜”和“深色瓜”这样的概念我们事先是不知道的,而且学习过程中,使用的训练样本通常不拥有标记信息。

  根据训练数据是否拥有标记信息,学习任务可大致分为两大类:“监督学习(supervised learning)”和“无监督学习(unsupervised learning)”,分类和回归是前者的代表,而聚类则是后者的代表。

  归纳(induction)和演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程。即从具体的事物归结出一般性规律;后者则是从一般到特殊的“特化”(specialization)过程。即从基础原理推演出具体状况。“从样例中学习”显然是一个归纳的过程,因此亦称为“归纳学习(induction learning)”。

  我们可以把学习过程看做一个在所有假设(hypothesis)组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配(fit)”的假设,即能够将训练集中的瓜判断正确的假设。假设的表示一旦确定,假设空间及其规模就确定了。这样,若‘色泽’,‘根蒂’,‘敲声’分别有3、3、3种可能取值,则我们面临的假设空间规模大小为4*4*4*+1=65.(+1表示这个世界根本没有好瓜)。但是在现实中,我们面临很大的假设空间,但学习过程是基于有限样本训练集进行的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的“假设集合”,我们称之为“版本空间(version space)

  当存在版本空间(version space)但对于具体学习算法而言又必须产生一个模型,则机器学习算法在学习过程中对某种类型假设的偏好就会起到关键作用,这种对某种类型假设的偏好称为“归纳偏好(inductive bias)”或简称为偏好。毕竟对于有限集的拟合可以出现很多种回归曲线,那么哪种曲线“正确”则和偏好有直接关系。那么,有没有一般性原则来引导算法确立“正确的”偏好?“奥卡姆剃刀(Occam's razor)”是一种常用的、自然科学研究中最基本的原则,即“若有多个假设与观察一致,则选择最简单的那个”。然而简单并不意味着正确, 复杂的假设完全可能是更加符合实际测试结果的。但是根据概率论的计算,无论学习算法La多聪明,学习算法Lb多笨拙,它们的期望性能是相同的,这就是“没有免费的午餐”定理(No Free Lunch Therem,简称NFL定理)

  什么意思呢?NFL定理告诉我们,在所有“问题”出现的机会相同、或所有问题等同重要时,所有学习算法的期望性能是一样的(甚至和随机胡乱猜差不多)。但实际情况并不是这样。很多时候,我们只关注自己正在解决的问题,希望为他找到一个解决方案,至于这个方案在别的问题、甚至相似的问题上是否为好方案,我们并不关心。所以,NFL定理最重要的寓意,是让我们清楚地认识到,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义,因为若考虑所有潜在的问题,则所有学习算法都一样好,要谈论算法的相对优劣,必须要针对具体的学习问题;在某些问题上表现好的算法,在另一些问题上却可能不尽如意,学习算法自身的归纳偏好与问题是否相匹配,往往会起到决定性的作用。

第2章模型评估与选择

 第一章属于对整个机器学习的综述,第二章开始模型评估与选择,起对应于python的scikit-learn库已经有相应章节。这里所写,将尽力结合与库中内容,综合总结。

  我们知道机器学习氛围监督学习和无监督学习,这两类中都有很多种方法(模型)。对于模型的评估,这里主要介绍监督学习的方法,包括回归(Regression)和分类(classification),因为在无监督学习中,模型评估与选择通常是一个非常定性的过程。

在介绍模型评估与选择之前,我们先来了解几个概念,这几个概念在你使用scikit-learn库的时候经常用到。

  最首先,我们通过实验测试来对模型的泛化进行误差分析,所以,我们应该对数据集(dataset)分为训练集(training set)和测试集(testing set)。这里有一个矛盾,训练集多了模型训练效果好,测试评估结果差;反之,训练效果差, 评估结果好。所以常见的做法是将大约2/3到4/5的样本用于训练,剩余样本用于测试。

基本概念:

  分类:

  分层采样(stratified sampling):为了使得训练/测试集保持数据分布一致,应该保持两个集合中正反例的比例相同。[stratified 会出现在train_test_split()参数中]

  错误率(error rate)/精度(accuracy):如果在m个样本中预测结果有a个样本分类错误,E=a/m;则精度acc=1-a/m。[精度是分类测试结果的评估指标,是acc=model.score的返回值]

  回归:  

  决定系数(cofficient ofdetermination,R2):是相关系数r的平方(决定系数=linearRegression.score的返回值)

具体方法:1、流出法(hold-out)(一致性,稳定性,保真性)

训练/测试集的划分要尽可能保持数据分布的一致性,如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。因为不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠。在使用留出法时,一般要采用若干次随机划分,重复进行试验评估后取平均值作为留出法的评估结果。另外,我们可能会有这样的窘境,若令训练集S包含绝大多数样本,则训练处的模型可能更接近于用D训练处的模型,但由于T比较小,评价结果可能不够稳定准确;若令测试集T多包涵一些样本,则训练集S与D差级更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。所有没有完美的解决方案,常见做法是将大约2/3到4/5的样本用于训练,剩余样本用于测试。

2、交叉验证法(cross validation,CV)

"交叉验证法(cross validation)"先将数据集D划分为K个大小相似的互斥子集。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个自己的并集作为训练集,剩余的那个自己作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。显然cross validation 评估结果的稳定性和保真性很大程度上取决于k的取值,为了强调这点,通常把cross validation称为“k-fold cross validation”。k最常用的取值是10。与留出法相似,k-fold cross validation通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,常见的与10次10折交叉验证(他与100次留出法都是进行了100次训练/测试)若D中有m个样本,令k=,则得到了交叉验证法的一个特例:留一法(Leave-one-out,LOO)这种方法看起来十分准确,但是缺陷是在数据集比较大时,训练m个模型的计算开销可能是难以忍受的。另外留一法未必永远比其他方法准备“没有免费的午餐”定理对于试验评估依然适用。

3、自助法bootstrapping(适用于数集较少)

每次从D中挑选一个样本拷贝放入D'中,然后将它放回初始数据D中,这样重复m次。样本在这m次采样中使用不被采到的概率是(1-1/m)^m,取极限得到1/e。即通过自助采样,初始数据集D中约有36.8%的样本从未出现在采样数据集D'中。于是我们可将D'用作训练集D\D'用作测试集。这样的测试结果,亦称为“保外估计”(out-of-bag estimate)。自助法在数据集较小、难以有效划分训练/测试集时候很有用,他对集成学习等方法有很大的好处。但是自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。

调参(parameter tuning)与最终模型
调参(parameter tuning)与算法选择没有什么本质区别:对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果。但实际上,由于参数的取值范围为实数,因此对每种参数配置都训练出模型来是不可行的,现实中常用的做法是对每个参数选定一个范围与步长。当然这种方法选定的参数值往往不是"最佳值",但这个是在折中后的结果,‘
注:机器学习常涉及两类参数:一类是算法的参数,亦称为“超参数”,数目常在10以内;另外一类是模型的参数,数目可能很多,例如大型“深度学习”模型甚至有上百亿个参数。两者的调参方式相似,均是产生多个模型之后基于某种评估方法来进行选择;不同之处在于前者通常是由人工设定多个参数候选值来产生模型,后者这是通过学习来产生多个候选模型(如神经网络在不同轮数停止训练)。

具体代码 我会在下一篇微博写完一起发出来。

猜你喜欢

转载自www.cnblogs.com/SsoZhNO-1/p/9641884.html