如何为分类问题选择合适的机器学习算法
2015-11-26 20:50
441 查看
若要达到一定的准确率,需要尝试各种各样的分类器,并通过交叉验证选择最好的一个。但是,如果你只是为你的问题寻找一个“足够好”的算法或者一个起点,以下准则有利于选择合适的分类器:
你的训练集有多大?
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。
然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。这可以认为这是生成模型与判别模型的区别。
一些特定算法比较
朴素贝叶斯
优点:简单;如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。
缺点:不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。
逻辑回归
优点:有许多正则化模型的方法,不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支持向量机 不同,有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。
决策树
优点:易于说明和解释,很容易地处理特征间的相互作用,并且是非参数化的,不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。
缺点:1)不支持在线学习,当有新样本时需要重建决策树。2)容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林适用于很多分类问题(通常略优于支持向量机)---快速并且可扩展,不像支持向量机那样调一堆参数。随机森林正渐渐开始偷走它的“王冠”。
SVMs
优点:高准确率,为过拟合提供了好的理论保证;即使数据在基础特征空间线性不可分,只要选定一个恰当的核函数,仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参 复杂,
尽管如此,更好的数据往往胜过更好的算法,设计好的特征非常重要。如果有一个庞大数据集,这时使用哪种分类算法在分类性能方面可能并不要紧;因此,要基于速度和易用性选择算法。
你的训练集有多大?
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。
然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。这可以认为这是生成模型与判别模型的区别。
一些特定算法比较
朴素贝叶斯
优点:简单;如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。
缺点:不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。
逻辑回归
优点:有许多正则化模型的方法,不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支持向量机 不同,有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。
决策树
优点:易于说明和解释,很容易地处理特征间的相互作用,并且是非参数化的,不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。
缺点:1)不支持在线学习,当有新样本时需要重建决策树。2)容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林适用于很多分类问题(通常略优于支持向量机)---快速并且可扩展,不像支持向量机那样调一堆参数。随机森林正渐渐开始偷走它的“王冠”。
SVMs
优点:高准确率,为过拟合提供了好的理论保证;即使数据在基础特征空间线性不可分,只要选定一个恰当的核函数,仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参 复杂,
尽管如此,更好的数据往往胜过更好的算法,设计好的特征非常重要。如果有一个庞大数据集,这时使用哪种分类算法在分类性能方面可能并不要紧;因此,要基于速度和易用性选择算法。
相关文章推荐
- android面试题(共12章,史上最全)
- TComponent与String的转换(得到控件的DFM格式的描述)
- Hibernate应用笔记 ORM实现原理和实例
- Javascript —— 有向图广度优先搜索
- mysql字符集编码查看及修改
- [代码篇] 单例模式——new一个窗体
- java代理
- leetcode Minimum Height Trees
- hdu 5491
- UITagBarController
- BZOJ3916: [Baltic2014]friends
- leetcode Minimum Height Trees
- 小注意点~
- UART(异步串口通信)裸板编程
- oracle要求mac更高版本
- C#基本控件
- pip 镜像
- matlab-mode函数
- 数据库中乐观锁与悲观锁的概念
- Eclipse Maven工程 打包jar文件(包含依赖jar) 打包过程与执行说明