Apache Mahout:构建垃圾邮件过滤器服务器
受到Google关于Map Reduce和Google Filesystem的一些著名论文的启发,这些新功能用于将索引分发到Nutch,并添加到Nutch中,这些功能最终由他们自己拥有: Hadoop 。 从那时起,许多项目都通过Hadoop开发。 我们正面临由Lucene火花点燃的开源代码的大爆炸。
- 分类:这是一种有监督的学习,您为机器提供了…事物的许多实例(例如文档)以及它们的类别。 机器从所有这些机器中学习将已知实例分类为将来的实例。
- 聚类:从某种意义上讲,它类似于分类,它使事物成组,但是这一分类不受监督。 您给机器提供了很多东西,然后机器将成组的类似物品组合在一起。
- 建议:这正是IMDb或Amazon对页面底部推荐的电影或书籍的处理方式。 根据其他用户的喜欢程度(通过用户投票的排名明星来衡量),Amazon可以推断“喜欢这本书的其他用户也喜欢这些其他人”。
离线示例
- 从网上获取火腿/垃圾邮件语料库(当然已经分类了)。
- 用语料库的80%训练分类器,剩下20%进行测试
- 创建一个简单的Web服务,对在线垃圾邮件进行分类。 您向其提供邮件,并且会显示“好”或“不好”(或“火腿”或“垃圾邮件”)
训练分类器时,会为其提供一个文件(是,一个文件),该文件每行包含一个已经分析过的文档。 “分析”的含义与Lucene分析文档的含义相同。 实际上,我们将使用Lucene StandardAnalizer来清理一些文档并将它们转换为术语流。 该流将放在此培训文件的一行中,其中第一个术语是该项目所属的类别。 例如,培训文件将如下所示
垃圾邮件现在购买伟哥特别折扣
我们将分别在其中放置一个垃圾邮件目录和一个火腿目录。
垃圾邮件
垃圾邮件
接下来,我们将使用以下命令准备训练和测试文件
bin/mahout prepare20newsgroups -p examples/bin/work/spam/train -o examples/bin/work/spam/prepared-train -a org.apache.mahout.vectorizer.DefaultAnalyzer -c UTF-8
bin/mahout prepare20newsgroups -p examples/bin/work/spam/test -o examples/bin/work/spam/prepared-test -a org.apache.mahout.vectorizer.DefaultAnalyzer -c UTF-8
bin/mahout trainclassifier -i examples/bin/work/spam/prepared-train -o examples/bin/work/spam/bayes-model -type bayes -ng 1 -source hdfs
bin/mahout testclassifier -m examples/bin/work/spam/bayes-model -d examples/bin/work/spam/prepared-test -type bayes -ng 1 -source hdfs -method sequential
一段时间后,我们得到以下结果
-------------------------------------------------------Correctly Classified Instances : 383 95,75%Incorrectly Classified Instances : 17 4,25%Total Classified Instances : 400
=======================================================Confusion Matrix-------------------------------------------------------a b <--Classified as189 11 | 200 a = spam6 194 | 200 b = ham
很好的结果!!!
实时对垃圾邮件进行分类的服务器
public class Antispam extends HttpServlet {private SpamClassifier sc;public void init() {try {sc = new SpamClassifier();sc.init(new File("bayes-model"));} catch (FileNotFoundException e) {e.printStackTrace();} catch (InvalidDatastoreException e) {e.printStackTrace();}}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Reader reader = req.getReader();try {long t0 = System.currentTimeMillis();String category = sc.classify(reader);long t1 = System.currentTimeMillis();resp.getWriter().print(String.format("{\"category\":\"%s\", \"time\": %d}", category, t1-t0));} catch (InvalidDatastoreException e) {e.printStackTrace();}}}
public class SpamClassifier {private ClassifierContext context;private Algorithm algorithm;private Datastore datastore;private File modelDirectory;Analyzer analyzer;public SpamClassifier(){analyzer = new DefaultAnalyzer();}public void init(File basePath) throws FileNotFoundException, InvalidDatastoreException{if(!basePath.isDirectory() || !basePath.canRead()){throw new FileNotFoundException(basePath.toString());}modelDirectory = basePath;
algorithm = new BayesAlgorithm();BayesParameters p = new BayesParameters();p.set("basePath", modelDirectory.getAbsolutePath());p.setGramSize(1);datastore = new InMemoryBayesDatastore(p);context = new ClassifierContext(algorithm, datastore);context.initialize();}public String classify(Reader mail) throws IOException, InvalidDatastoreException {String document[] = BayesFileFormatter.readerToDocument(analyzer, mail);ClassifierResult result = context.classifyDocument(document, "unknown");return result.getLabel();}}
该算法是该方法的核心,并且是策略设计模式的明显实例。 我们正在使用BayesAlgorithm,但是我们可以使用使用互补朴素贝叶斯算法的CbayesAlgorithm。
ClassifierContext是用于对文档进行分类的接口。
curl http://localhost:8080/antispam -H "Content-T-Type: text/xml" --data-binary @ham.txt
我们得到
{"category":"ham", "time": 10}
结论
参考:来自我们的JCG合作伙伴 Emmanuel Espina的 火腿,垃圾邮件和大象(或如何使用Mahout构建垃圾邮件过滤服务器) 在emmaespina博客上。
翻译自: https://www.javacodegeeks.com/2012/03/apache-mahout-build-spam-filter-server.html
Apache Mahout:构建垃圾邮件过滤器服务器相关推荐
- 什么是垃圾邮件过滤器,它的原理是什么?
什么是垃圾邮件过滤器 垃圾邮件过滤器是一个程序,可检测未经请求和不需要的电子邮件(垃圾邮件)并阻止它们到达收件人的收件箱. 垃圾邮件过滤器还根据特定标准组织邮件.例如,Gmail 用户将他们的邮件分类 ...
- 防止Domino邮件服务器作为垃圾邮件转发服务器
故障原因: Domino邮件服务器被作为垃圾邮件转发服务器,造成邮件收发严重阻塞 解决方法: 在服务器配置的"路由/smtp"---- "限制与控制" ---- ...
- wordpress撰写模式_如何在WordPress中撰写好的博客评论并绕过垃圾邮件过滤器
wordpress撰写模式 Have you ever thought about what makes a good blog comment? Want to know of a sure-fir ...
- 基于 Apache Mahout 构建社会化推荐引擎
http://www.ibm.com/developerworks/cn/java/j-lo-mahout/ Web 2.0 的一个核心思想就是"群体智慧",即基于大众行为,为每个 ...
- 千万当心!不启用代理功能,网站也有可能被恶意用作垃圾邮件发送服务器
摘要: 最近巡检网站时,发现有大量的异常链接,如"tcp 0 912 hhrz.org:80 125.224.196.186:1087 ...
- 垃圾邮件分类器_如何在10个步骤中构建垃圾邮件分类器
垃圾邮件分类器 If you're just starting out in Machine Learning, chances are you'll be undertaking a classif ...
- 集体智慧编程——垃圾邮件过滤器(贝叶斯)-Python实现
介绍垃圾邮件分类器的设计与实现,分为一下几个步骤: 特征提取: 将训练样本的正文切分为特征,如果是英文,直接按照空格切分,每个词可以作为一个特征:如果是中文,则需要借助分词器,如jieba分词器等.切 ...
- python垃圾邮件过滤_垃圾邮件过滤器Python newbi
我需要能够处理数据集,应用我的分类算法(我选择了3个朴素的bayes版本),打印精度得分到终端,并执行5到10倍交叉验证,找出有多少电子邮件是垃圾邮件. 正如你所看到的,我已经完成了一些任务,但是没有 ...
- 大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
最新文章
- 如何在5美元的Raspberry Pi上构建个人开发服务器
- 干货|一文读懂中国7大支付体系(附27页流程图)
- C#读写word,文段及表格
- 判断是否是数组的方法
- html页面foot,HTML tfoot用法及代码示例
- 基于python开发的口罩供需平台
- 贪心算法求解问题的选择准则
- php手机网页_使用PHPCMS搭建wap手机网站
- 计件工资系统c语言,计件工资管理系统
- 计算机考研402,2021双非无项目科班402分上岸中科大-数学经验+复试全过程
- 学习C++:C++进阶(三)CMake基础篇---用一个小型项目了解CMake及环境构建
- 分享高压超低噪声LDO测试结果(High Voltage Ultra-low Noise LDO)
- UOS其他分区及移动硬盘带锁问题处理
- 嵌入式主板有哪些特点?
- 在VMware8.0下安装crux2.6
- android设置个性桌面,秀出真个性 Android桌面美化类软件横评
- 侯捷 C++系列课程视频 | 侯捷 C++ STL 视频
- SAP接口debug设置外部断点
- Centos7单机安装torque6.1.2
- 数据结构自学笔记(C语言)十大排序