聚类分类模型代码主要在包org.apache.mahout.clustering.classify里面,其主要利用一系列的聚类簇和聚类策略对样本进行分类。我们先来看看类ClusterClassifier。
一、ClusterClassifier
ClusterClassifier有四个属性,分别是聚类策略序列化存放文件路径、一系列的聚类簇、聚类簇类别和聚类策略。
private static final String POLICY_FILE_NAME = "_policy";//聚类策略序列化存放路径
private List<Cluster> models;//一系列的聚类簇模型
private String modelClass;//模型类别
private ClusteringPolicy policy;//聚类策略
聚类模型参见mahout0.7源码解析之聚类--聚类模型,聚类策略参见mahout0.7源码解析之聚类--聚类模型。
此类继承AbstractVectorClassifier,并实现了接口OnlineLearner和Writable。在这个类里面我们重点需要关注的函数有classify、classifyScalar和train。
classify主要是利用ClusterClassifier里面的聚类模型给样本进行分类,返回的结果为每个聚类模型对此样本的分类结果。
classifyScalar主要用于二元分类,返回结果为样本属于第一个类别的概率。
train函数有很多不同参数形式,实质就是用指定的聚类模型对样本进行分类,有时还需要带上此样本的权重。
此类还提供了对聚类策略的序列化和反序列化函数,readPolicy和writePolicy。
二、ClusterClassificationDriver
ClusterClassificationDriver利用了ClusterClassifier对样本进行分类,即将样本分到不同的簇中。其也提供了单机版本和Map-Reduce版本的算法。我们还是从run函数开始。