如何选择分类器
为了解决你的分类问题,你要选择哪种机器学习算法呢?当然,如果你非常重视准确率,你最好的办法就是测试一组不同的算法(同时确保在相同的模型中也使用不同的参数),然后用交叉验证选择出最好的一个。但是如果你只是在寻找一个“足够好”的算法来解决你的问题,或者只是找一个出发点,那么下面是一些我在这些年中发现的普遍成立的指导原则。
你的训练集有多大?
如果你的训练集比较小,那么高偏置少变量(high bias/low variance)分类器(例如朴素贝叶斯)要优于低偏置多变量分类器(例如KNN),因为后者会发生过拟合。但是当训练集变大的时候低偏置多变量的方法就变得更优(他们有更低的渐进错误率(asymptotic error)),因为高偏置少变量分类器不足以提供准确的模型。
你可以把这看做是生成式模型和判别式模型之间的差别。
一些特别的算法的优点
朴素贝叶斯的优点:
非常容易建立,你只是做了一些计数工作。如果朴素贝叶斯条件独立假设是成立的,那么朴素贝叶斯会收敛得比判别式模型更快(例如逻辑回归),所以你只需要更少的数据。并且即使朴素贝叶斯假设实际上并不成立,在实践中朴素贝叶斯分类器仍然工作的不错。总之如果你想要一个建立容易、速度快、正确率不错的模型,那么就选朴素贝叶斯吧。
它主要的缺点是不能学习到特征之间的关系(举个例子,你喜欢Brad Pitt 和Tom Cruise的电影,但是不喜欢他们一起出演的电影)
逻辑回归的优点:
有很多方法使你的模型变得正则,所以你并不需要像使用朴素贝叶斯一样,那么担心你的特征之间的相关性。你仍然能得到一个很好的概率解释(probabilistic interpretation),你也可以很容易的加入新数据并且更新模型(使用在线的梯度下降法),这些在决策树或SVMs中都是做不到的。如果你想要得到一个概率化的框架(这样可以容易地确定分类阈值,这样可以告诉别人什么时候你是不确定的,什么时候是有信心的),或者你预期在将来会得到更多的训练数据并且想快速地把它们吸收到你的模型中,那么就使用逻辑回归吧。
决策树的优点:
容易解释和说明决策的结果。决策树可以控制特征的交互并且它们是非参数化的,所以你不用担心离群点和特征是否线性可分的问题(例如,决策树可以处理这样的情况:x特征低时对应A类,中等时对应B类,很高时又对应A类)。决策树的一个缺点是它们不支持在线学习,所以如果你得到了新的数据,你只能建一个新的决策树。另一个缺点是它们容易过拟合,但是一些融合方法,例如random forests(或boosted trees)的引入可以缓解这个问题。另外,在很多问题中随机森林(random forsets)经常是优胜的模型(经常比SVMs好一点点,我相信),它们快速而又可扩展,并且你不需要像处理SVMs那样去调优一堆参数,所以决策树最近似乎比较火。
SVMs的优点:
高正确率,对于防止过拟合的理论保障,并且引入了合适的核函数后可以处理在原特征空间中线性不可分的问题。SVMs在文本分类这种高维的问题中尤其的热门。但是SVMs内存密集,难以解释,并且调优参数有点让人恼火,所以我认为随机森林正在超越它。
但是。。。
好的数据经常战胜好的算法,并且设计一组好的特征需要很长的路。并且如果你有一个巨大的数据集,那么你用哪种算法对于模型的表现都没有太大影响(所以改用速度和易用程度来作为衡量指标)。
重申一遍,如果你很重视正确率,你应该测试一组不同的模型并且通过交叉验证选出最好的一个。或者从Netflix Prize中吸取教训,选择它们的全部并且使用融合方法。
原文:Choosing a Machine Learning Classifier
http://blog.echen.me/2011/04/27/choosing-a-machine-learning-classifier/