« clustering | Main | 网站备份 »

bayes,简单就是美

机器学习大体可以分为分类学习、聚类、关联学习、数值预测。分类学习通过对一个已知分类的学习集的学习获得可以将未知数据集进行分类的能力,聚类则使数据自然的落在几个小组里,关联学习是希望能获得每个特性之间的相关性,数值预测则预测出一个离散类。在上海的时候由于公司的需要做过一段时间的机器学习的工作,主要就是文本自动分类,尝试过naive bayes、knn、svm等方法。google黑板报上的数学之美系列文章,除了让人了解到各种关于搜索和数据挖掘的知识之外,更大的作用还在于让你发现其实很多东西即使是最简单的手段也可以做到不错的效果。google的工程师说在中学学习余弦定理时,很难想象它可以用来对新闻进行分类,事实上在大学上概率统计的课程时我都没想到说bayes会对我将来的工作有任何的帮助。机器学习的一个重要的应用领域就是文本分类,而bayes算法在这一领域的使用有很长的历史了。bayes算法是非常简单的,但是在实际的应用领域,bayes算法的效果并不比那些复杂的算法差,有时甚至更有优势。SpamAssassin是apache基金的一个反垃圾邮件软件项目,获得了2006 Linux New Media Awards上的Best Linux-based Anti-spam Solution award。SpamAssassin是用perl写的,算法便是基于bayes。SpamAssassin采用概率统计的方法来为邮件打分,通过分数的高低来猜测哪些有可能是垃圾邮件。SpamAssassin官方网站表示只有大概0.9%的垃圾邮件会被漏过和0.1%的有效邮件被当成垃圾邮件过滤掉。当然除了基于bayes算法之外,SpamAssassin还做了很多工作才能到达这个效果。另外,由于bayes基于属性独立的假设之上,而事实上这是很难的,因此如果在数据中加入一个新的属性,则很有可能破坏了原有的整个机器学习的过程。我自己在做英文文本自动分类时发现,在分词、停词处理、词根处理、同义词转换都相同的情况下,bayes得到的效果稍好于knn和svm,当然这并不是说bayes这个算法绝对的好于其他算法,因为除了算法之外还有很多其他方面以及应用领域的影响。而在效率上由于nayes不用进行参数选择,所以bayes的训练强度几乎就是和他的训练集的增长以及测试集的增场成线性关系。而采用knn和svm时,由于需要找到最有效的参数才能使结果优化所以在训练方面需要有很大的投入,比如使用交叉训练的方式来获取最优参数就是一见非常消耗时间和资源的事情。由此可见流传甚广的一句格言:简单就是美,在bayes身上有非常好的体现。当然,除了算法之外,机器学习还跟前期训练数据的准备和处理有很大关系,6e关于相关度计算的介绍,google黑板报上关于统计语言模型数据处理的系列文章都是很好的参考资料。

参考资料:
International Society for Bayesian Analysis
http://www.bayesian.org/
SpamAssassin
http://spamassassin.apache.org/

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)