我的机器学习教程「美团」算法工程师带你入门机器学习   已经开始更新了,欢迎大家订阅~

任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~


在机器学习中,分类器作用是在标记好类别的训练数据基础上判断一个新的观察样本所属的类别。分类器依据学习的方式可以分为非监督学习和监督学习。非监督学习顾名思义指的是给予分类器学习的样本但没有相对应类别标签,主要是寻找未标记数据中的隐藏结构。,监督学习通过标记的训练数据推断出分类函数,分类函数可以用来将新样本映射到对应的标签。在监督学习方式中,每个训练样本包括训练样本的特征和相对应的标签。监督学习的流程包括确定训练样本的类型、收集训练样本集、确定学习函数的输入特征表示、确定学习函数的结构和对应的学习算法、完成整个训练模块设计、评估分类器的正确率。这一节的目的是分类器的选取。可以依据下面四个要点来选择合适的分类器。

1. 泛化能力和拟合之间的权衡

过拟合评估的是分类器在训练样本上的性能。如果一个分类器在训练样本上的正确率很高,说明分类器能够很好地拟合训练数据。但是一个很好的拟合训练数据的分类器就存在着很大的偏置,所以在测试数据上不一定能够得到好的效果。如果一个分类器在训练数据上能够得到很好效果但是在测试数据上效果下降严重,说明分类器过拟合了训练数据。从另一个方面分析,若分类器在测试数据上能够取得好效果,那么说明分类器的泛化能力强。分类器的泛化和拟合是一个此消彼长的过程,泛化能力强的分类器拟合能力一般很弱,另外则反之。所以分类器需要在泛化能力和拟合能力间取得平衡。

2. 分类函数的复杂度和训练数据的大小

训练数据的大小对于分类器的选择也是至关重要的,如果是一个简单的分类问题,那么拟合能力强泛化能力弱的分类器就可以通过很小的一部分训练数据来得到。反之,如果是一个复杂的分类问题,那么分类器学习就需要大量的训练数据和泛化能力强的学习算法。一个好的分类器应该能够根据问题的复杂度和训练数据的大小自动地调整拟合能力和泛化能力之间的平衡。

3. 输入的特征空间的维数

如果输入特征空间的向量维数很高的话,就会造成分类问题变得复杂,即使最后的分类函数仅仅就靠几个特征来决定的。这是因为过高的特征维数会混淆学习算法并且导致分类器的泛化能力过强,而泛化能力过强会使得分类器变化太大,性能下降。因此,一般高维特征向量输入的分类器都需要调节参数使其泛化能力较弱而拟合能力强。另外在实验中,也可以通过从输入数据中去除不相干的特征或者降低特征维数来提高分类器的性能。

4. 输入的特征向量之间的均一性和相互之间的关系

如果特征向量包含多种类型的数据(如离散,连续),许多分类器如SVM,线性回归,逻辑回归就不适用。这些分类器要求输入的特征必须是数字而且要归一化到相似的范围内如 之间。而像K最近邻算法和高斯核的SVM这些使用距离函数的分类器对于数据的均一性更加敏感。但是另一种分类器决策树却能够处理这些不均一的数据。如果有多个输入特征向量,每个特征向量之间相互独立,即当前特征向量的分类器输出仅仅和当前的特征向量输入有关,那么最好选择那些基于线性函数和距离函数的分类器如线性回归、SVM、朴素贝叶斯等。反之,如果特征向量之间存在复杂的相互关系,那么决策树和神经网络更加适合于这类问题。

接下来确定经验风险的最小化值

交叉验证(Cross-validation)

1.The Validation Set Approach

第一种是最简单的,也是很容易就想到的。我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集(training set)和测试集(test set)。

例如,如上图所示,我们可以将蓝色部分的数据作为训练集(包含7、22、13等数据),将右侧的数据作为测试集(包含91等),这样通过在蓝色的训练集上训练模型,在测试集上观察不同模型不同参数对应的MSE的大小,就可以合适选择模型和参数了。

不过,这个简单的方法存在两个弊端。

1.最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法。什么意思呢?我们再看一张图:

右边是十种不同的训练集和测试集划分方法得到的test MSE,可以看到,在不同的划分方法下,test MSE的变动是很大的,而且对应的最优degree也不一样。所以如果我们的训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。

2.该方法只用了部分数据进行模型的训练

我们都知道,当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。

基于这样的背景,有人就提出了Cross-Validation方法,也就是交叉验证。

2.Cross-Validation

2.1 LOOCV

首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,我们现在只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。

如上图所示,假设我们现在有n个数据组成的数据集,那么LOOCV的方法就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。结果就是我们最终训练了n个模型,每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。

比起test set approach,LOOCV有很多优点。首先它不受测试集合训练集划分方法的影响,因为每一个数据都单独的做过测试集。同时,其用了n-1个数据训练模型,也几乎用到了所有的数据,保证了模型的bias更小。不过LOOCV的缺点也很明显,那就是计算量过于大,是test set approach耗时的n-1倍。

为了解决计算成本太大的弊端,又有人提供了下面的式子,使得LOOCV计算成本和只训练一个模型一样快。

其中表示第i个拟合值,而则表示leverage。关于的计算方法详见线性回归的部分(以后会涉及)。

2.2 K-fold Cross Validation

另外一种折中的办法叫做K折交叉验证,和LOOCV的不同在于,我们每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:

1.将所有数据集分成5份

2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的

3.将5次的取平均得到最后的MSE

不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)。再来看一组图:

每一幅图种蓝色表示的真实的test MSE,而黑色虚线和橙线则分贝表示的是LOOCV方法和10-fold CV方法得到的test MSE。我们可以看到事实上LOOCV和10-fold CV对test MSE的估计是很相似的,但是相比LOOCV,10-fold CV的计算成本却小了很多,耗时更少。

2.3 Bias-Variance Trade-Off for k-Fold Cross-Validation

最后,我们要说说K的选取。事实上,和开头给出的文章里的部分内容一样,K的选取是一个Bias和Variance的trade-off。

K越大,每次投入的训练集的数据越多,模型的Bias越小。但是K越大,又意味着每一次选取的训练集之前的相关性越大(考虑最极端的例子,当k=N,也就是在LOOCV里,每次都训练数据几乎是一样的)。而这种大相关性会导致最终的test error具有更大的Variance。

一般来说,根据经验我们一般选择k=5或10。

2.4 Cross-Validation on Classification Problems

上面我们讲的都是回归问题,所以用MSE来衡量test error。如果是分类问题,那么我们可以用以下式子来衡量Cross-Validation的test error:

其中Erri表示的是第i个模型在第i组测试集上的分类错误的个数。

[交叉验证]机器学习中分类器的选择相关推荐

  1. 分类器交叉验证java_使用交叉验证的KNN分类器

    首先,您需要准确定义您的任务 . F.ex给出R ^(MxN)中的图像I,我们希望将I分类为包含面部的图像或没有面部的图像 . 我经常使用像素分类器,其任务类似于:对于图像,我决定每个像素是面像素还是 ...

  2. python k折交叉验证,python中sklearnk折交叉验证

    python中sklearnk折交叉验证 发布时间:2018-06-10 11:09, 浏览次数:492 , 标签: python sklearnk 1.模型验证回顾 进行模型验证的一个重要目的是要选 ...

  3. 机器学习中分类器常见评价指标

    为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每个样本进行预测,并根据预测结果计算评价分数.对于分类问题,常见的评价指标有正确率.召回率.F值等.给定测试集T=(x(1)^{( ...

  4. 深度盘点:详细介绍机器学习中的7种交叉验证方法!

    来源:机器学习社区 本文约3400字,建议阅读10分钟 本文与你分享7种最常用的交叉验证技术及其优缺点,提供了每种技术的代码片段. 在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的 ...

  5. 【机器学习】深度盘点:详细介绍 Python 中的 7 种交叉验证方法!

    在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的示例中学习所有权重和偏差的最佳值. 如果我们使用相同的标记示例来测试我们的模型,那么这将是一个方法论错误,因为一个只会重复刚刚看到的 ...

  6. 机器学习中的交叉验证

    总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现. 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有 ...

  7. 详细介绍机器学习中的交叉验证方法

    机器学习的交叉验证 前言 HoldOut交叉验证 K折交叉验证 分层K折交叉验证 Leave P Out 留一交叉验证 蒙特卡罗交叉验证 时间序列交叉验证 前言 在研究生阶段接触机器学习的时候,我导问 ...

  8. 机器学习中的模型评价、模型选择及算法选择

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 正确使用模型评估.模型选择和算法选择技术无论是对机器学习学术研究还是工业场景应用都至关重要.本文将对这三个任务的相关技术 ...

  9. 【机器学习】交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图

    [机器学习]交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图 一.使用背景 由于在训练集上,通过调整参数设置使估计器的性能达到了最佳状态:但在测试集上可能会出现过拟合的情况. 此时,测试集 ...

  10. 交叉验证和超参数调整:如何优化您的机器学习模型

    In the first two parts of this article I obtained and preprocessed Fitbit sleep data, split the data ...

最新文章

  1. cannot find module 'cordova-common'
  2. win10前面板耳机没声音
  3. Python的subprocess子进程和管道进行交互
  4. JDBC连接MySQL数据库代码模板
  5. NOIP2018划水记
  6. 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数
  7. C++11 —— 基于区间(range)的 for 循环
  8. anaconda查看删除增加镜像源
  9. 实现Servlet接口来开发Servlet程序
  10. f-stack nginx 单进程模式BSD网络初始化流程
  11. 二、VS插件之VassistX
  12. Unity URP 内置的 ParticlesLit.shader 中的 fallback 拼写错误,导致 fallback 找不到 SimpleLit,改为 Simple Lit即可
  13. 《数学分析(上)》重要概念复习
  14. php word 生成图片,php如何把word转图片
  15. 30分钟,学会经典小游戏编程!
  16. 【python】Flask-SQLAlchemy的Lost connection问题
  17. python easygui该如何使用?
  18. Database_数据库基础笔记整理
  19. ssl证书默认端口是什么,ssl证书证书的作用
  20. 时间戳(Unix timestamp)转换工具 - 在线工具-和-在线解析JSON

热门文章

  1. C++ container member map
  2. C#调用c++Dll结构体数组指针的问题
  3. Windows操作系统dos常见用法与常见问题
  4. 7——1 shelve 模块
  5. Java多线程:线程死锁
  6. Android2.1--如何在android模拟器上安装与删除.APK文件
  7. win10+anaconda3+python3.7+pytorch-cpu安装
  8. 18家机构批量刷新SOTA!T5 is all you need!
  9. ICLR'22 | 图机器学习最近都在研究什么?
  10. 美团知识图谱问答技术实践与探索