Pyspark聚类--PowerIterationClustering

PowerIterationClustering

class pyspark.ml.clustering.PowerIterationClustering(k=2, maxIter=20, initMode=‘random’, srcCol=‘src’, dstCol=‘dst’, weightCol=None)

幂迭代聚类 (PIC),一种由 Lin 和 Cohen 开发的可扩展图聚类算法。 从摘要中:PIC 在数据的归一化成对相似度矩阵上使用截断幂迭代找到数据集的非常低维嵌入。 这个类还不是构造器/转换器,使用 assignClusters() 方法运行 PowerIterationClustering 算法。

assignClusters(dataset)[source] 运行 PIC 算法并为每个输入顶点返回一个簇分配。

参数数据集——具有 src、dst、权重列的数据集,表示亲和矩阵,即 PIC 论文中的矩阵 A。 假设 src 列值为 i,dst 列值为 j,权重列值为相似度 s,ij,,必须为非负数。 这是一个对称矩阵,因此 s,ij, = s,ji,。 对于任何具有非零相似度的 (i, j),输入中应该有 (i, j, s,ij,) 或 (j, i, s,ji,)。 i = j 的行被忽略,因为我们假设 s,ij, = 0.0。

返回一个数据集,其中包含顶点 id 列和该 id 的相应集群。 它的结构将是: - id:Long - cluster:Int

dstCol = Param(parent=‘undefined’, name=‘dstCol’, doc=‘目标顶点 ID 的输入列的名称。’)

initMode = Param(parent=‘undefined’, name=‘initMode’, doc="初始化算法。这可以是“随机”以使用随机向量作为顶点属性,也可以是“度”以使用归一化的相似性总和 与其他顶点。支持的选项:“随机”和“度”。”)

srcCol = Param(parent=‘undefined’, name=‘srcCol’, doc=‘源顶点 ID 的输入列的名称。’)

weightCol = Param(parent=‘undefined’, name=‘weightCol’, doc=‘weight 列名。如果未设置或为空,我们将所有实例权重视为 1.0。’)

01.创建数据集

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.10")\
    .config("spark.ui.showConsoleProgress","false").appName("PowerIterationClustering")\
    .master("local[*]").getOrCreate()
data = [(1, 0, 0.5),
        (2, 0, 0.5), (2, 1, 0.7),
        (3, 0, 0.5), (3, 1, 0.7), (3, 2, 0.9),
        (4, 0, 0.5), (4, 1, 0.7), (4, 2, 0.9), (4, 3, 1.1),
        (5, 0, 0.5), (5, 1, 0.7), (5, 2, 0.9), (5, 3, 1.1), (5, 4, 1.3)]
df = spark.createDataFrame(data).toDF("src", "dst", "weight")
df.show()
df.printSchema()

​ 输出结果:

+---+---+------+
|src|dst|weight|
+---+---+------+
|  1|  0|   0.5|
|  2|  0|   0.5|
|  2|  1|   0.7|
|  3|  0|   0.5|
|  3|  1|   0.7|
|  3|  2|   0.9|
|  4|  0|   0.5|
|  4|  1|   0.7|
|  4|  2|   0.9|
|  4|  3|   1.1|
|  5|  0|   0.5|
|  5|  1|   0.7|
|  5|  2|   0.9|
|  5|  3|   1.1|
|  5|  4|   1.3|
+---+---+------+

root
 |-- src: long (nullable = true)
 |-- dst: long (nullable = true)
 |-- weight: double (nullable = true)

02.构造聚类模型,并转换原有数据查看

from pyspark.ml.clustering import PowerIterationClustering
pic = PowerIterationClustering(k=2, maxIter=40, weightCol="weight")
assignments = pic.assignClusters(df)
assignments.show()
assignments.sort(assignments.id).show(truncate=False)

​ 输出结果:

+---+-------+
| id|cluster|
+---+-------+
|  4|      1|
|  0|      1|
|  1|      1|
|  5|      0|
|  2|      1|
|  3|      1|
+---+-------+

+---+-------+
|id |cluster|
+---+-------+
|0  |1      |
|1  |1      |
|2  |1      |
|3  |1      |
|4  |1      |
|5  |0      |
+---+-------+
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值