Mahout简介:
1.是apache旗下的开源项目,提供了机器学习相关的系列算法,是一个开发者用于使用和改装的工具框架;
2.主要算法可分为协同过滤/推荐引擎、聚类、分类三大类,并且有很强的扩展性,可以自主优化算法;
3.支持hadoop分布式计算;
4.无需安装,是一个Java library;
5.svn check out地址:http://svn.apache.org/repos/asf/mahout/trunk
主要模块包括:
1)分类:
Mahout 拥有多种分类算法,其中大多数算法都是为了在 Hadoop上运行而编写的(只有一个值得注意的例外,即随机梯度下降法)。
Mahout中实现的分类算法
算法 | 简要描述 |
Naive Bayes
| Naive Bayes 分类器为速度快和准确性高而著称,适用于文本分类。Bayes方法的薄弱环节在于实际情况下,类别总体的概率分布和各类样本的概率分布函数(或密度函数)常常是不知道的。为了获得它们,就要求样本足够大。另外,Bayes要求表达文本的主题词相互独立,这样的条件在实际文本中一般很难满足,因此该方法往往在效果上难以达到理论上的最大值。许多人最初都选择这种分类器,在有效扩展的时候,它也能给出合理的结果。 |
Complementary Naive Bayes
| 尝试纠正 Naive Bayes 方法中的一些问题,同时仍然能够维持简单性和速度。 |
Preceptron感知器算法和Winnow | 二分类问题,线性分类器,在线学习算法。 |
RBM有限波尔兹曼机 | 人工随机神经网络算法,要求大训练集。 |
HMM隐马尔可夫模型 | 经典分类算法的顺序和并行实现,设计用于在基本生成过程不可知的情况下建模实际过程。 |
Stochastic Gradient Descent随机梯度下降算法 | 速度超快、简单的顺序分类器,能够在要求严格的环境中实现在线学习。 |
Support Vector Machine支持向量机 | SVM算法基于结构风险最小化的理论,在特征空间中建构出一个最优超平面来分割两类域的样本数据。二分类问题。适合于小样本集。 |
Random Forests | 随机森林包含多个决策树。当需要预测一个新的样本的时候,采用"少数服从多数"的策略确定样本的类别。随机森林中任意两棵树的相关程度越高,预测结果越差。森林中每棵独立的树的分类能力越强,随机森林的分类结果越好。 |
2)聚类:
Mahout中实现的聚类算法
算法 | 简要描述 |
Canopy | 基于划分,速度快,但是比较粗糙,通常作为Kmeans的前面步骤,为其计算出初始类心 |
Kmeans | 基于划分,算法简单效果也比较好,需要指定初始的K个类心,可以用Canopy作为前步骤先大致算出类心,这样会更准确。计算出来的类的个数是固定的(K个),而且一个点只属于一个类。 |
Minhash | 算法简单,mahout里只用一个map+一个reduce就实现了,但是输出并不能直接用,还需要自己做处理。 |
Lda | 最近很热,算法复杂但是效果很好。 |
Dirichlet | 基于概率模型的,需要先定义一个概率模型,效果也不错。 |
Meanshift |
|
topdown | 本身并不包含算法,看了下里面只是对输出的文件夹做了重新的整理(postProcess),以便进行下次聚类的使用, |
fuzzykmeans | 是kmeans的扩张,加了模糊参数,与Kmeans的差别是一个点可以属于多个类,即类是可重叠的 |