二分K均值算法原理及Spark MLlib调用实例(Scala/Java/Python)

介绍了二分K均值算法的基本原理与实现过程,该算法通过递归地将簇一分为二来达到聚类的目的,并提供了Scala、Java及Python三种语言的调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分K均值算法

算法介绍:

二分K均值算法是一种层次聚类算法,使用自顶向下的逼近:所有的观察值开始是一个簇,递归地向下一个层级分裂。分裂依据为选择能最大程度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。以此进行下去,直到簇的数目等于用户给定的数目k为止。二分K均值常常比传统K均值算法有更快的计算速度,但产生的簇群与传统K均值算法往往也是不同的。

BisectingKMeans是一个Estimator,在基础模型上训练得到BisectingKMeansModel。

参数:

featuresCol:

类型:字符串型。

含义:特征列名。

k:

类型:整数型。

含义:聚类簇数。

maxIter:

类型:整数型。

含义:迭代次数(>=0)。

predictionCol:

类型:字符串型。

含义:预测结果列名。

seed:

类型:长整型。

含义:随机种子。

调用示例:

Scala:

import org.apache.spark.ml.clustering.BisectingKMeans

// Loads data.
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

// Trains a bisecting k-means model.
val bkm = new BisectingKMeans().setK(2).setSeed(1)
val model = bkm.fit(dataset)

// Evaluate clustering.
val cost = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $cost")

// Shows the result.
println("Cluster Centers: ")
val centers = model.clusterCenters
centers.foreach(println)
Java:

import org.apache.spark.ml.clustering.BisectingKMeans;
import org.apache.spark.ml.clustering.BisectingKMeansModel;
import org.apache.spark.ml.linalg.Vector;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

// Loads data.
Dataset<Row> dataset = spark.read().format("libsvm").load("data/mllib/sample_kmeans_data.txt");

// Trains a bisecting k-means model.
BisectingKMeans bkm = new BisectingKMeans().setK(2).setSeed(1);
BisectingKMeansModel model = bkm.fit(dataset);

// Evaluate clustering.
double cost = model.computeCost(dataset);
System.out.println("Within Set Sum of Squared Errors = " + cost);

// Shows the result.
System.out.println("Cluster Centers: ");
Vector[] centers = model.clusterCenters();
for (Vector center : centers) {
  System.out.println(center);
}
Python:

from pyspark.ml.clustering import BisectingKMeans

# Loads data.
dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")

# Trains a bisecting k-means model.
bkm = BisectingKMeans().setK(2).setSeed(1)
model = bkm.fit(dataset)

# Evaluate clustering.
cost = model.computeCost(dataset)
print("Within Set Sum of Squared Errors = " + str(cost))

# Shows the result.
print("Cluster Centers: ")
centers = model.clusterCenters()
for center in centers:
    print(center)


 

### Apache Spark 示例代码和教程 #### 使用 Scala 编写简单的 Word Count 应用程序 为了展示如何使用 Apache Spark 进行基本的数据处理操作,下面是一个经典的单词计数例子。此示例展示了如何加载文本文件并计算每个单词出现次数。 ```scala import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("word count").setMaster("local[*]") val sc = new SparkContext(conf) // 加载数据集 val textFile = sc.textFile("hdfs://path/to/input/file") // 执行词频统计 val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) // 将结果保存到 HDFS 文件系统中 counts.saveAsTextFile("hdfs://path/to/output/directory") sc.stop() } } ``` 这段代码创建了一个名为 `WordCount` 的对象来执行任务[^2]。通过设置配置参数可以指定应用程序名称以及运行模式(本地或集群),接着初始化一个 `SparkContext` 实例作为与底层系统的接口[^3]。之后读取输入路径下的所有文件内容,并将其转换成 RDD 数据结构;再利用一系列变换函数完成分词、映射及聚合工作;最后把最终的结果存储至指定位置。 #### PySpark 开发指南 对于 Python 用户来说,PySpark 提供了一种便捷的方式来构建基于 Spark 的大数据分析流程。以下是关于怎样在 Windows 平台上搭建环境并编写第一个 Pyspark 程序的一些指导: - **准备工作** - 下载并安装 JDK 和 Anaconda 发行版; - 添加环境变量以便能够顺利调用 Java 命令; - 解压下载好的 Spark 版本包并将 bin 路径加入 PATH 中去。 - **启动 PySpark Shell** 打开命令提示符窗口键入 pyspark 即可进入交互式的解释器界面,在这里可以直接测试各种 API 功能而无需事先打包整个工程项目。 - **简单实例:求平均值** 假设有一个由若干整数组成的列表,则可以通过如下方式快速得出其均值: ```python from pyspark import SparkContext sc = SparkContext(appName="Average Calculation") data = [1, 2, 3, ..., n] rdd = sc.parallelize(data) mean_value = rdd.mean() print(f"The mean value is {mean_value}") ``` 上述片段首先建立了连接上下文(sc),随后定义了一些数值放入内存里形成分布式集合(rdd)。借助内置方法 `.mean()` 来获得整体水平度量指标——即算术平均数(mean)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值