建立随机中心的过程
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-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 源码包, hadoop 机器学习子项目 mahout 源码包
总结,Apache Mahout 0.7是机器学习领域的重要资源,其源码提供了深入理解算法实现的机会。通过研究源码,开发者不仅可以学习到机器学习的基本原理,还能掌握如何在实际项目中应用这些算法。同时,结合Apache Spark...
Mahout是一个Apache Software Foundation(ASF)旗下的开源项目,主要用途是提供可扩展的机器学习算法的实现,帮助开发人员更方便快捷地创建智能应用程序。Mahout包含了很多算法的实现,包括聚类(Clustering)、...
mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7
**Apache Mahout 源码解析** Apache Mahout 是一个基于Java的开源机器学习库,旨在简化大规模数据集上的机器学习算法实现。它为开发者提供了一系列预构建的、可扩展的机器学习算法,包括分类、聚类、推荐系统以及...
mahout 中的类库解析,API,是学习mahout的好帮手
Apache Mahout是一款基于Java开发的机器学习库,旨在提供可扩展的、高效的算法,用于数据挖掘和模式识别。在大数据时代,Mahout已经成为数据科学家和工程师们的重要工具,尤其在文本分析、推荐系统和分类任务中扮演...
mahout0.9的源码,支持hadoop2,需要自行使用mvn编译。mvn编译使用命令: mvn clean install -Dhadoop2 -Dhadoop.2.version=2.2.0 -DskipTests
以上就是关于Mahout 0.9源码及其在Eclipse中的使用介绍。通过学习和实践,开发者可以利用Mahout构建强大的机器学习应用,处理各种数据挖掘任务。在实际应用中,可以根据项目需求选择合适的算法,结合Hadoop分布式...
Mahout:整体框架,实现了协同过滤 Deeplearning4j,构建VSM Jieba:分词,关键词提取 HanLP:分词,关键词提取 Spring Boot:提供API、ORM 关键实现 基于用户的协同过滤 直接调用Mahout相关接口即可 选择不同...
mahout-distribution-0.5-src.zip mahout 源码包
在源码层面,Mahout使用Java编写,并利用Hadoop的MapReduce框架进行分布式计算。这使得它能够处理PB级别的数据,同时保持良好的可扩展性。开发者可以通过调用Mahout的API来实现自己的机器学习任务,也可以通过命令行...
用于测试mahout中的决策树 ,即Partial Implementation用到的测试jar包。所谓的测试其实也只是把相应的数据可以打印出来,方便单机调试,理解算法实现原理而已。
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》是一本深入探讨Apache Mahout机器学习框架的专业书籍,其源码提供了丰富的实践示例和深入理解Mahout算法的机会。在GitHub上,你可以找到这些源码的完整版本,链接为。下面,我们将详细探讨...
mahout_help,mahout的java api帮助文档,可以帮你更轻松掌握mahout