基于贝叶斯方法的垃圾邮件过滤工具

为了应付人工智能大作业,做了一个简单的垃圾邮件过滤工具,后来找到现成的语料(自己能找上千封分好类的邮件作为资料再慢慢一封封解析不太容易,我又不是搞人工智能的),所以最后一共也就写了300行代码。

处理好的语料的包含类别信息+54个特征词在邮件中的出现情况,一共4000多封的内容信息。

邮件用多变量贝努力事件模型表示,说白了就是忽视单词的频率,每个词在该邮件的情况,出现过置1,没出现置0,相对于考虑频率的各种模型和方法,这样算是大大简化了,但是资料说,其实这样的效果也差不了多少,在小规模数据甚至更好。

很多论文中是以信息增益作为特征选择排序的计算方法,计算公式也不复杂,至于我使用的spambase(http://www.ics.uci.edu/~mlearn/MLRepository.html)语料就不知道它是咋算的了,但是里面给出的54个关键词倒是有点奇怪,一些常用词没有,估计是做了一定优化处理,从关键词感觉垃圾邮件大多是推销商品的那种,可能我的工具代表性、推广性一般般,最后用这么简单的方法,得到的过滤效率居然高于百分之90,也没经过任何优化,还是有点意外的,不知道换一种语料情况如何。


至于其他细节也懒得记了,好久没写过Java,还是赶紧学起Java,主要记一些敲代码碰到的小问题吧。


1.上来用JDBC连数据库,告诉我Driver的类查不到,以前用数据库好像没印象要下个专门的mysql-jdbc-connection包,反正下了个导进去也就好了

2.通过sql语句查询得到的结果集ResultSet,单个循环取值没问题,用同一个Statement查询得到2个ResultSet并交替取值,报错说结果集关闭了,不能用一个Statement交替操作两个,后来多声明一个Statement也就行了

3.读取一行文件时,最后可能多一个换行符

4.两个整数相除时会自动将小数点后阶段,并返回整数,所以计算30/1700一直给我得到0,哪怕你用浮点数赋值也没用,先返回int,再帮你转成double,所以必须将两整数其一或是两者都强制转换为浮点数,或者这样在右侧强转float r1=(float)wrongNormal/normalNum;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值