从头开始实施朴素贝叶斯分类器的好语言是什么?

时间:2010-04-27 00:34:31

标签: programming-languages implementation machine-learning spam-prevention

我想实施一个朴素的贝叶斯分类器,从头开始进行垃圾邮件过滤作为学习练习。尝试以下内容的最佳方法是什么?

  1. 爪哇
  2. 红宝石
  3. C ++
  4. C
  5. 别的东西
  6. 请说明理由(这会有很大帮助!)

2 个答案:

答案 0 :(得分:2)

我会用C#来做,但这只是因为它是我目前最熟悉的语言,因为我知道它有强大的字符串处理能力。它也可以使用stl :: string类,Ruby,Java等在C ++中完成。

如果我正在构建一个朴素的贝叶斯分类器,我会从一个简单的例子开始,就像Russell & Norvig书中的那个(我在第二版中所学到的那个)。书中的那本书或Mitchell's书中的那本书(我使用他的,因为他教了这门课)。让学习者以一般方式生成规则;也就是说,给定输入数据,产生输出规则,并且输入数据是一般化的东西(可以是用于垃圾邮件检测的文本块,可以是用于预测某人是否打网球的天气报告)。

如果您正在尝试学习贝叶斯分类器,那么这样一个简单的例子比完整的垃圾邮件过滤器更好。语言解析本身很难,然后确定是否存在垃圾语言也很困难。最好有一个简单的小数据集,您可以从中获得学习者应该学习的内容,并确保您的程序符合您的要求。然后,您可以扩展数据集,或修改程序以包含语言解析等内容。

答案 1 :(得分:1)

从贝叶斯分类器转向编程语言,我会忽略“其他东西”过于宽泛,没有明显优秀的候选者。在你列出的四个中,我会避​​免使用C和C ++,因为谁想要处理内存管理,尤其是在你学习的时候?通常我会因为静态类型系统而对Java感兴趣,如果你是初学者,我认为这仍然是最安全的选择。但Ruby也是一个明智的选择,因为你可以非常迅速地创新新想法和新例子。

我一直致力于维护一个相当强大的贝叶斯分类器版本来阅读电子邮件。它是用Lua和C的混合编写的。它的性能非常高,但我对设计感到遗憾的事情之一就是代码中内置了很少的抽象。我绝对建议在代码中构建抽象,如

  • 特征提取

  • 频率计算

  • 概率表示

Java使得实现这些抽象障碍变得非常容易,尽管Ruby也可以这样做。

我的同事Fidelis Assis发现的一件事是,标准浮点数不能代表非常小的概率。我们用概率的对数做了相当多的事情(概率乘以,对数和)。