`
bjmike
  • 浏览: 283069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mahout 0.7源码学习

 
阅读更多
建立随机中心的过程
RandomSeedGenerator.buildRandom
//初始中心为vector自己
Kluster newCluster = new Kluster(value.get(), nextClusterId++, measure);

TFIDF建立的Vector类型
//TFIDFPartialVectorReducer
Vector vector = new RandomAccessSparseVector((int) featureCount, value.getNumNondefaultElements());


默认的测量距离的方法
measureClass = SquaredEuclideanDistanceMeasure.class.getName();


聚类策率
ClusteringPolicy policy = new KMeansClusteringPolicy(convergenceDelta);
ClusterClassifier prior = new ClusterClassifier(clusters, policy);


主要算法保存在
org.apache.mahout.clustering.iterator.CIMapper
org.apache.mahout.clustering.iterator.CIReducer


求得某点到所有cluster中心的距离,得到的是一个数组,
AbstractClusteringPolicy.java
 public Vector classify(Vector data, ClusterClassifier prior) {
    List<Cluster> models = prior.getModels();
    int i = 0;
    Vector pdfs = new DenseVector(models.size());
    for (Cluster model : models) {
//求得该点属于某个模型的几率,为1/(1+该点到聚类中心的距离)
      pdfs.set(i++, model.pdf(new VectorWritable(data)));
    }
//zSum:vector中所有元素的和,TimesFunction用来计算乘积的函数,assign对每个元素执行该函数
    return pdfs.assign(new TimesFunction(), 1.0 / pdfs.zSum());
  }



找出相似都最大的值
public Vector select(Vector probabilities) {
    //获取最大的值,因为保存的值为1/距离,所以距离越小值越大,相似性就越高
    int maxValueIndex = probabilities.maxValueIndex();
    Vector weights = new SequentialAccessSparseVector(probabilities.size());
    weights.set(maxValueIndex, 1.0);
    return weights;
  }




合同相同的聚类,并重新计算中心点
CIReducer.java
protected void reduce(IntWritable key, Iterable<ClusterWritable> values, Context context) throws IOException,
      InterruptedException {
    Iterator<ClusterWritable> iter = values.iterator();
    ClusterWritable first = null;
    while (iter.hasNext()) {
      ClusterWritable cw = iter.next();
      if (first == null) {
        first = cw;
      } else {
        first.getValue().observe(cw.getValue());
      }
    }
    List<Cluster> models = new ArrayList<Cluster>();
    models.add(first.getValue());
    classifier = new ClusterClassifier(models, policy);
    //此处进入重新计算聚类中心点,引用的是KMeansClusteringPolicy.close()方法,
   //KMeansClusteringPolicy在close中引用computeParameters方法计算中心点
    classifier.close();
    context.write(key, first);
  }


computeParameters方法计算中心点

public void computeParameters() {
    if (getS0() == 0) {
      return;
    }
    setNumObservations((long) getS0());
    setTotalObservations(getTotalObservations() + getNumObservations());
    setCenter(getS1().divide(getS0()));
    // compute the component stds
    //计算半径,貌似采用标准方差的办法
    if (getS0() > 1) {
      setRadius(getS2().times(getS0()).minus(getS1().times(getS1())).assign(new SquareRootFunction()).divide(getS0()));
    }
    setS0(0);
    //设置s1为空的vector
    setS1(center.like());
//设置s2为空的vector
    setS2(center.like());
  }



计算聚类归属:
在计算完中心点后计算,也可以理解为分类,参数为runClustering=true时候才生效,此时可设置一定的阀值,参数为clusterClassificationThreshold,只取指定的条件分类,输出目录为clusteredPoints
 public static void clusterData(Configuration conf, Path input, Path clustersIn, Path output, DistanceMeasure measure,
      double clusterClassificationThreshold, boolean runSequential) throws IOException, InterruptedException,
      ClassNotFoundException {
    
    if (log.isInfoEnabled()) {
      log.info("Running Clustering");
      log.info("Input: {} Clusters In: {} Out: {} Distance: {}", new Object[] {input, clustersIn, output, measure});
    }
    ClusterClassifier.writePolicy(new KMeansClusteringPolicy(), clustersIn);
    ClusterClassificationDriver.run(input, output, new Path(output, CLUSTERED_POINTS_DIRECTORY),
        clusterClassificationThreshold, true, runSequential);
  }
分享到:
评论

相关推荐

    mahout 0.7

    mahout-core-0.7.jar,注意版本hadoop-1.0.x,eclipse-3.7。(mahout0.7不支持hadoop-2.2),由mahout-distribution-0.7.tar.gz源码构建生成jar包,可以直接引入。

    mahout 0.7 src

    mahout 0.7 src, mahout 源码包, hadoop 机器学习子项目 mahout 源码包

    mahout-distribution-0.7-src.zip

    总结,Apache Mahout 0.7是机器学习领域的重要资源,其源码提供了深入理解算法实现的机会。通过研究源码,开发者不仅可以学习到机器学习的基本原理,还能掌握如何在实际项目中应用这些算法。同时,结合Apache Spark...

    mahout Algorithms源码分析

    Mahout是一个Apache Software Foundation(ASF)旗下的开源项目,主要用途是提供可扩展的机器学习算法的实现,帮助开发人员更方便快捷地创建智能应用程序。Mahout包含了很多算法的实现,包括聚类(Clustering)、...

    mahout-integration-0.7

    mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7

    Mahout源码

    **Apache Mahout 源码解析** Apache Mahout 是一个基于Java的开源机器学习库,旨在简化大规模数据集上的机器学习算法实现。它为开发者提供了一系列预构建的、可扩展的机器学习算法,包括分类、聚类、推荐系统以及...

    mahout-0.7-core-api.chm

    mahout 中的类库解析,API,是学习mahout的好帮手

    mahout源码

    Apache Mahout是一款基于Java开发的机器学习库,旨在提供可扩展的、高效的算法,用于数据挖掘和模式识别。在大数据时代,Mahout已经成为数据科学家和工程师们的重要工具,尤其在文本分析、推荐系统和分类任务中扮演...

    mahout0.9源码(支持hadoop2)

    mahout0.9的源码,支持hadoop2,需要自行使用mvn编译。mvn编译使用命令: mvn clean install -Dhadoop2 -Dhadoop.2.version=2.2.0 -DskipTests

    mahout0.9 源码

    以上就是关于Mahout 0.9源码及其在Eclipse中的使用介绍。通过学习和实践,开发者可以利用Mahout构建强大的机器学习应用,处理各种数据挖掘任务。在实际应用中,可以根据项目需求选择合适的算法,结合Hadoop分布式...

    人工智能-推荐系统-新闻推荐-基于Mahout的新闻推荐系统

    Mahout:整体框架,实现了协同过滤 Deeplearning4j,构建VSM Jieba:分词,关键词提取 HanLP:分词,关键词提取 Spring Boot:提供API、ORM 关键实现 基于用户的协同过滤 直接调用Mahout相关接口即可 选择不同...

    mahout-distribution-0.5-src.zip mahout 源码包

    mahout-distribution-0.5-src.zip mahout 源码包

    大数据系列9:Mahout – 机器学习

    在源码层面,Mahout使用Java编写,并利用Hadoop的MapReduce框架进行分布式计算。这使得它能够处理PB级别的数据,同时保持良好的可扩展性。开发者可以通过调用Mahout的API来实现自己的机器学习任务,也可以通过命令行...

    mahout-core-0.7-job.jar

    用于测试mahout中的决策树 ,即Partial Implementation用到的测试jar包。所谓的测试其实也只是把相应的数据可以打印出来,方便单机调试,理解算法实现原理而已。

    Apache Mahout Cookbook code

    Thank you for requesting the download for Apache Mahout Cookbook. Please click the following link to download the code:

    博客推荐系统源码

    运行博客推荐程序需要注意的地方: 1. 打开mysql,增加blog数据库;... 2. 修改blog.xml(和Readme.txt同目录)的docBase为本地目录,放在tomcat的conf\...版本:Spring3+Struts2+Hibernate3+Hadoop1.0.4+Mahout0.7+Mysql5

    mahout in action中的源码

    《Mahout in Action》是一本深入探讨Apache Mahout机器学习框架的专业书籍,其源码提供了丰富的实践示例和深入理解Mahout算法的机会。在GitHub上,你可以找到这些源码的完整版本,链接为。下面,我们将详细探讨...

    mahout api 学习资料

    mahout_help,mahout的java api帮助文档,可以帮你更轻松掌握mahout

Global site tag (gtag.js) - Google Analytics