MLlib--PIC算法

转载请标明出处http://www.cnblogs.com/haozhengfei/p/82c3ef86303321055eb10f7e100eb84b.html


PIC算法   幂迭代聚类

    PIC算法全称Power iteration clustering 幂迭代聚类

1.谱聚类

幂迭代聚类的前身--谱聚类,基于图论的计算方法。(可以用点来表示对象,对象之间的关系用连线表示,Neo4j 图数据库用来做用户与用户之间的关系,它可以存两个对象之间的关系,它是半开源的单机版免费,集群版收费,它的规模不是很大,也就是几千万级别,如果数据量很大,也可以用Spark中的图计算Graphx)

2.谱聚类分割方法

相似度与权重:

将每条数据当做图中的每个点,数据与数据之间的相似度为点和点的边的权重

谱聚类的分割方法:

        最优分割的原则是使子图内部边的权重之和最大,子图之间的边的权重之和最小。

 

距离越小,相似度越高,那么权重之和越大

– Mcut(最小割集)

– Ncut (规范割集)一般使用Ncut多一些,既考虑最小化cut边又划分平衡。避免出现很多个单点离散的图

谱聚类的实现方式和步骤_NCut规范格局(如果是Mcut采用倒数第二小的特征即为所求):

1.构建相似度矩阵(相似度矩阵可用邻接矩阵表示),指定聚类个数K;

2.利用相似度矩阵构建拉普拉斯矩阵L

3.计算标准化之后的拉普拉斯矩阵LK个特征向量,并按照特征值升序排序

4.对由K个特征向量组成的矩阵按照每行进行Kmeans聚类

5.将聚类结果的各个簇分别打上标记,对应上原数据,输出结果

补充:

点与点之间关联的邻接矩阵

拉普拉斯矩阵 = 度矩阵 - 邻接矩阵  (度矩阵:无向图中的度指的是连接一个点的边有多少,有向图中有出入度的概念,出度和入度,可以用邻接矩阵中每一行相加求出 度矩阵)

  矩阵M * 向量L = 向量L,但是如果矩阵M * 向量L = 向量L * 数值a,那么L就是M的特征向量,a就是相应的特征值。(一个矩阵不一定会有特征向量,也可能有很多的特征向量。一个特征向量会有一个特征值,二者是成对出现的)

 矩阵的特征值和特征向量,矩阵中的每一行*一个特征向量相当于将矩阵中的一行映射到向量中指定的某一点,这种方式从某种角度上做到了降维。

3.PIC算法VS谱聚类

PIC和谱聚类算法类似,都是通过将数据嵌入到由相似矩阵映射出来的低维子空间中,然后直接或者通过kmean算法得到聚类结果

它们的不同点在于如何嵌入及产生低维子空间

– 谱聚类是通过拉普拉斯矩阵产生的最小向量构造的

     – Pic利用数据规范化的相似度矩阵,采用截断的快速迭代法

4谱聚类code

train

PowerIterationClustering_new

 1 import org.apache.log4j.{Level, Logger}
 2 import org.apache.spark.rdd.RDD
 3 import org.apache.spark.{SparkConf, SparkContext}
 4 import org.apache.spark.mllib.clustering.PowerIterationClustering
 5
 6 /**
 7   * Created by hzf
 8   */
 9 object PowerIterationClustering_new {
10 //    E:\IDEA_Projects\mlib\data\pic\train\pic_data.txt E:\IDEA_Projects\mlib\data\pic\model 3 20 local
11     def main(args: Array[String]) {
12         Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
13         if (args.length < 5) {
14             System.err.println("Usage: PIC <inputPath> <modelPath> <K> <iterations> <master> [<AppName>]")
15             System.exit(1)
16         }
17         val appName = if (args.length > 5) args(5) else "PIC"
18         val conf = new SparkConf().setAppName(appName).setMaster(args(4))
19         val sc = new SparkContext(conf)
20         val data: RDD[(Long, Long, Double)] = sc.textFile(args(0)).map(line => {
21             val parts = line.split(" ").map(_.toDouble)
22             (parts(0).toLong, parts(1).toLong, parts(2))
23         })
24
25         val pic = new PowerIterationClustering()
26                 .setK(args(2).toInt)
27                 .setMaxIterations(args(3).toInt)
28         val model = pic.run(data)
29
30         model.assignments.foreach { a =>
31             println(s"${a.id} -> ${a.cluster}")
32         }
33         model.save(sc, args(1))
34     }
35 }

设置运行参数

  1. E:\IDEA_Projects\mlib\data\pic\train\pic_data.txt E:\IDEA_Projects\mlib\data\pic\model 320 local

时间: 2024-12-26 11:48:33

MLlib--PIC算法的相关文章

Spark MLlib机器学习算法、源码及实战讲解pdf电子版下载

Spark MLlib机器学习算法.源码及实战讲解pdf电子版下载 链接:https://pan.baidu.com/s/1ruX9inG5ttOe_5lhpK_LQg 提取码:idcb <Spark MLlib机器学习:算法.源码及实战详解>书中讲解由浅入深慢慢深入,解析讲解了MLlib的底层原理:数据操作及矩阵向量计算操作,该部分是MLlib实现的基础:并对此延伸机器学习的算法,循序渐进的讲解其中的原理,是读者一点一点的理解和掌握书中的知识. 目录 · · · · · · 第一部分 Spa

Spark MLlib FPGrowth算法

1.1 FPGrowth算法 1.1.1 基本概念 关联规则挖掘的一个典型例子是购物篮分析.关联规则研究有助于发现交易数据库中不同商品(项)之间的联系,找出顾客购买行为模式,如购买了某一商品对购买其他商品的影响,分析结果可以应用于商品货架布局.货存安排以及根据购买模式对用户进行分类. 关联规则的相关术语如下: (1)项与项集 这是一个集合的概念,在一篮子商品中的一件消费品即为一项(Item),则若干项的集合为项集,如{啤酒,尿布}构成一个二元项集. (2)关联规则 一般记为的形式,X为先决条件,

Spark MLlib SVM算法

1.1 SVM支持向量机算法 支持向量机理论知识参照以下文档: 支持向量机SVM(一) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html 支持向量机SVM(二) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html 支持向量机(三)核函数 http://www.cnblogs.com/jerrylead/archive/2011/03/18/

使用 Spark MLlib 做 K-means 聚类分析[转]

原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice4/ 引言 提起机器学习 (Machine Learning),相信很多计算机从业者都会对这个技术方向感到兴奋.然而学习并使用机器学习算法来处理数据却是一项复杂的工作,需要充足的知识储备,如概率论,数理统计,数值逼近,最优化理论等.机器学习旨在使计算机具有人类一样的学习能力和模仿能力,这也是实现人工智能的核心思想和方法.传统的机器学习算法,由于技术和

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“机器学习是对能通过经验自动改进的计算机算法的研究”. l“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准.” 一种经常引用的英文定义是:A computer program is said

用Spark学习矩阵分解推荐算法

在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法.而基于的算法是FunkSVD算法,即将m个用户和n个物品对应的评分矩阵M分解为两个低维的矩阵:$$M_{m \times n}=P_{m \times k}^TQ_{k \times n}$$ 其中k为分解成低维的维数,一般远比m和n小.如果大

用Spark学习FP Tree算法和PrefixSpan算法

在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法.由于scikit-learn中没有关联算法的类库,而Spark MLlib有,本文的使用以Spark MLlib作为使用环境. 1. Spark MLlib关联算法概述 在Spark MLlib中,也只实现了两种关联算法,即我们的FP Tree和PrefixSpan,而像Apriori,GSP之类的关联算法是没有的.而

Spark MLlib介绍

Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用Hadoop的MapReduce计算框架,每次计算都要读/写磁盘以及任务的启动等工作,这回导致非常大的I/O和CPU消耗.而Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说Spark正是机器学习的理想的

Spark MLlib之线性回归源码分析

1.理论基础 线性回归(Linear Regression)问题属于监督学习(Supervised Learning)范畴,又称分类(Classification)或归纳学习(Inductive Learning);这类分析中训练数据集中给出的数据类标是确定的:机器学习的目标是,对于给定的一个训练数据集,通过不断的分析和学习产生一个联系属性集合和类标集合的分类函数(Classification Function)或预测函数(Prediction Function),这个函数称为分类模型(Clas