Pyspark聚类--BisectingKMeans

BisectingKMeans

class pyspark.ml.clustering.BisectingKMeans(featuresCol=‘features’, predictionCol=‘prediction’, maxIter=20, seed=None, k=4, minDivisibleClusterSize=1.0, distanceMeasure=‘euclidean’)

一种基于 Steinbach、Karypis 和 Kumar 的论文“文档聚类技术比较”的二等分 k-means 算法,经过修改以适应 Spark。 该算法从包含所有点的单个开始。 它迭代地在底层找到可分割的簇,并使用 k-means 将它们一分为二,直到总共有 k 个叶簇或没有叶簇是可分割的。 同一级别的二等分步骤被组合在一起以增加并行度。 如果在底层平分所有可分割的簇会产生超过 k 个叶簇,则较大的簇获得更高的优先级。

k = Param(parent=‘undefined’, name=‘k’, doc=‘所需的叶子簇数。必须> 1。’)

minDivisibleClusterSize = Param(parent=‘undefined’, name=‘minDivisibleClusterSize’, doc='一个可分簇的最小点数(如果>= 1.0)或最小比例点(如果<1.0)。

distanceMeasure = Param(parent=‘undefined’, name=‘distanceMeasure’, doc=“距离度量。支持的选项:‘euclidean’ 和 ‘cosine’。”)

**model.computeCost:**计算输入点与其对应的聚类中心之间的距离平方和

model.clusterCenters:聚类中心

model.hasSummary:指示此模型实例是否存在训练摘要

model.summary:获取在训练集上训练的模型的摘要(例如集群分配、集群大小)。如果不存在摘要则抛出异常

01.构造数据

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.10")\
    .config("spark.ui.showConsoleProgress","false").appName("BisectingKMeans")\
    .master("local[*]").getOrCreate()
from pyspark.ml.linalg import Vectors
data = [(Vectors.dense([0.0, 0.0]),),
        (Vectors.dense([1.0, 1.0]),),
        (Vectors.dense([9.0, 8.0]),),
        (Vectors.dense([8.0, 9.0]),)]
df = spark.createDataFrame(data, ["features"])
df.show()
df.printSchema()

​ 输出结果:

+---------+
| features|
+---------+
|[0.0,0.0]|
|[1.0,1.0]|
|[9.0,8.0]|
|[8.0,9.0]|
+---------+

root
 |-- features: vector (nullable = true)

02.使用2等分K-means聚类模型

from pyspark.ml.clustering import BisectingKMeans
bisectingKMeans = BisectingKMeans(k=2,minDivisibleClusterSize=1.0)
model = bisectingKMeans.fit(df)

03.查看模型的相关属性

​ .1聚类中心

print(model.clusterCenters())

​ 输出结果:

[array([0.5, 0.5]), array([8.5, 8.5])]

​ .2计算输入点与其对应的聚类中心之间的距离平方和

print(model.computeCost(df))

​ 输出结果:

2.0000000000000004

​ .3判断模型是否有摘要信息

print(model.hasSummary)

​ 输出结果:True

​ .4通过摘要信息,查看聚类大小

summary = model.summary
print(summary.clusterSizes)

​ 输出结果:[2, 2]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值