本文是学习(http://www.ibm.com/developerworks/cn/java/j-mahout/)的笔记。
监管和 无监管学习
监管学习的任务是学习带标签的训练数据的功能,以便预测任何有效输入的值。监管学习的常见例子包括将电子邮件消息分类为垃圾邮件,根据类别标记网 页,以及识别手写输入。创建监管学习程序需要使用许多算法,最常见的包括神经网络、Support Vector Machines (SVMs) 和 Naive Bayes 分类程序。
无监管学习的任务是发挥数据的意义,而不管数据的正确与否。它最常应用于将类似的输入集成到逻辑分组中。它还可以用于减少数据集中的维度数据,以便只专注于最有用的属性,或者用于探明趋势。无监管学习的常见方法包括 k-Means、分层集群和自组织地图。
常用的三个领域
- 推荐
- 集群
- 分类
软件安装
JDK 1.6 或更高版本
Ant 1.7 或更高版本
如果要编译 Mahout 源代码,还需要安装 Maven
建立一个推荐引擎
Mahout 目前提供了一些工具,可用于通过 Taste 库建立一个推荐引擎 —针对 CF 的快速且灵活的引擎。Taste 支持基于用户和基于项目的推荐,并且提供了许多推荐选项,以及用于自定义的界面。Taste 包含 5 个主要组件,用于操作 用户、项目和 首选项:
- DataModel:用于存储 用户、项目和 首选项
- UserSimilarity:用于定义两个用户之间的相似度的界面
- ItemSimilarity:用于定义两个项目之间的相似度的界面
- Recommender:用于提供推荐的界面
- UserNeighborhood:用于计算相似用户邻近度的界面,其结果随时可由 Recommender使用
借助这些组件以及它们的实现,开发人员可以构建复杂的推荐系统,提供基于实时或者离线的推荐。基于实时的推荐经常只能处理数千用户,而离线推荐具有更好的适用性。
使用 Mahout 实现集群
Mahout 支持一些集群算法实现(都是使用 Map-Reduce 编写的),它们都有一组各自的目标和标准:
- Canopy:一种快速集群算法,通常用于为其他集群算法创建初始种子。
- k-Means(以及 模糊 k-Means):根据项目与之前迭代的质心(或中心)之间的距离将项目添加到 k 集群中。
- Mean-Shift:无需任何关于集群数量的 推理知识的算法,它可以生成任意形状的集群。
- Dirichlet:借助基于多种概率模型的集群,它不需要提前执行特定的集群视图。