如何选择机器学习分类器?
来源:互联网 发布:当口译员有多难 知乎 编辑:程序博客网 时间:2024/05/21 09:18
你知道如何为你的分类问题选择合适的机器学习算法吗?当然,如果你真正关心准确率,那么最佳方法是测试各种不同的算法(同时还要确保对每个算法测试不同参数),然后通过交叉验证选择最好的一个。但是,如果你只是为你的问题寻找一个“足够好”的算法,或者一个起点,这里有一些我这些年发现的还不错的一般准则。
你的训练集有多大?
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。
你也可以认为这是生成模型与判别模型的区别。
一些特定算法的优点
朴素贝叶斯的优点:超级简单,你只是在做一串计算。如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。它的主要缺点是,不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。
逻辑回归的优点:有许多正则化模型的方法,你不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支撑向量机不同,你还可以有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。
决策树的优点:易于说明和解释(对某些人来说—我不确定自己是否属于这个阵营)。它们可以很容易地处理特征间的相互作用,并且是非参数化的,所以你不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。一个缺点是,不支持在线学习,所以当有新样本时,你将不得不重建决策树。另一个缺点是,容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林往往是很多分类问题的赢家(我相信通常略优于支持向量机),它们快速并且可扩展,同时你不须担心要像支持向量机那样调一堆参数,所以它们最近似乎相当受欢迎。
SVMs的优点:高准确率,为过拟合提供了好的理论保证,并且即使你的数据在基础特征空间线性不可分,只要选定一个恰当的核函数,它们仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参也有些烦人,因此,我认为随机森林正渐渐开始偷走它的“王冠”。
然而…
尽管如此,回忆一下,更好的数据往往打败更好的算法,设计好的特征大有裨益。并且,如果你有一个庞大数据集,这时你使用哪种分类算法在分类性能方面可能并不要紧(所以,要基于速度和易用性选择算法)。
重申我上面说的,如果你真的关心准确率,一定要尝试各种各样的分类器,并通过交叉验证选择最好的一个。或者,从Netflix Prize(和Middle Earth)中吸取教训,只使用了一个集成方法进行选择。
- 如何选择机器学习分类器?
- 如何选择机器学习分类器?
- 如何选择机器学习分类器?
- 机器学习中如何选择分类器
- 如何选择机器学习分类器?
- [038]如何选择机器学习分类器?
- 如何选择机器学习分类器?
- 如何选择机器学习中的分类器
- 机器学习分类算法应该如何选择?
- 机器学习分类算法应该如何选择?
- 如何为分类问题选择合适的机器学习算法
- 如何为分类问题选择合适的机器学习算法
- [交叉验证]机器学习中分类器的选择
- 如何选择分类器
- 如何选择机器学习算法
- 如何选择机器学习算法
- 如何选择机器学习算法
- 如何选择机器学习算法
- MediaProvider 数据库Audio相关表格对应关系
- X9BYOD最佳实践1-虚拟机IO吞吐限制(根据用户反馈整理)
- jenkins-slave service on windows
- 线程案例问题小结
- java浅析之RXTX串口通信
- 如何选择机器学习分类器?
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- Oracle 11gR2下安装OBE(Oracle By Examples)的错误解决
- javascript中使用console与alert调试的差别
- Win32下两种用于C++的线程同步类(多线程实现加锁解锁)
- PHP的执行流程,PHP扩展加载过程
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
- 类变量、实例变量的初始化顺序
- "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法