logo资料库

实验 Spark ML Bisecting k-means聚类算法使用.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
实验:Spark ML Bisecting k-means聚类算法使用实验
实验:Spark ML Bisecting k-means 聚类算 法使用实验 实验目的:通过 Spark ML Bisecting k-means 聚类算法实例,使 学生掌握在 Spark 中如何使用 Bisecting k-means 聚类算法解决实 际问题,并进一步加深对 k-means 聚类算法的理解。 实验环境:Linux 系统,Spark 集群环境,Spark 开发环境 实验内容:学习 Spark 中 Bisecting k-means 聚类算法的使用 实验步骤: 一、导入需要的包 二、加载和解析数据 三、构建 k-means 聚类模型 四、评估模型 五、保存和加载模型 Spark ML 中 Bisecting K-means 算 法 的 实 现 类 BisectingKMeans 具有以下参数: def __init__(self, featuresCol="features", predictionCol="prediction", maxIter=20, seed=None, k=4, minDivisibleClusterSize=1.0): 参数的含义解释如下:
 k 表示期望的聚类的个数;  maxIter 表示方法单次运行最大的迭代次数;  minDivisibleClusterSize 一个簇可划分的最小点数或比例;  seed 表示集群初始化时的随机种子。 实例:导入训练数据集,使用 Bisecting k-means 算法将数据 聚类到两个簇当中,所需的簇个数会作为参数传递到算法中,然 后计算簇内均方差总和(WSSSE),可以通过增加类簇的个数 k 来 减小误差。 本实例使用 Bisecting k-means 算法进行聚类的步骤如下: 1) 装载数据,数据以文本文件方式进行存放; 2) 将数据集聚类,设置 2 个类和 20 次迭代,进行模型训练形 成数据模型; 3) 打印数据模型的中心点; 4) 使用误差平方之和来评估数据模型; 5) 使用模型测试数据; 该实例使用的数据存放在 kmeans_data.txt 文档中,提供了 6 个点的空间位置坐标,数据如下所示: 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 每行数据描述了一个点,每个点有 3 个数字描述了其 3 维空 间坐标值。我们将数据的每一列视为一个特征指标,对数据集进
行聚类分析。 一、导入需要的包 # 1. 导入需要的包: from pyspark.ml.clustering import BisectingKMeans, BisectingKMeansModel from pyspark.ml.linalg import Vectors from pyspark.sql import SparkSession 二、加载和解析数据 spark = SparkSession\ .builder\ .appName("BisectingKMeansExample")\ .getOrCreate() # 2. 以 libsvm 格式读取数据文件构造 DataFrame # 原始数据文件 sample_libsvm_data.txt 中的数据以行为一条数据, # 形如: 1.0 1.0 1.0,表示共有三个特征,特征值都为 1.0 dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") dataset.show() 三、构建 Bisecting k-means 聚类模型 输入 Bisecting k-means 聚类模型参数,通过训练数据得到 Bisecting k-means 聚类模型 # 3. 设置参数,训练 KMeans 聚类模型 # setK(2) 表示聚成 2 个类 # seed 表示集群初始化时的随机种子 Bkm = BisectingKMeans().setK(2).setSeed(1) model = bkm.fit(dataset) # 4. 进行预测 predictions = model.transform(dataset) predictions.show() 四、评估模型 误差平方和越小,证明模型越准确。 # 5. 通过计算误差平方和评价聚类模型 cost = model.computeCost(dataset)
print("Within Set Sum of Squared Errors = " + str(cost)) 五、保存和加载模型 # 7. 保存模型 model.save("model/bisecting_kmeans") # 8. 加载模型 sameModel = BisectingKMeansModel.load("model/bisecting_kmeans") # 9. 使用模型测试数据 data = [(0, Vectors.sparse(3, [0, 1, 2], [0.3, 0.3, 0.3])), (1, Vectors.sparse(3, [0, 1, 2], [3.7, 5.8, 4.8])), (2, Vectors.sparse(3, [0, 1, 2], [8.0, 8.1, 8.2]))] new_df = spark.createDataFrame(data, ["label", "features"]) new_df.show() 完整代码及运行结果: # coding=utf-8 # 1. 导入需要的包: from pyspark.ml.clustering import BisectingKMeans, BisectingKMeansModel from pyspark.ml.linalg import Vectors from pyspark.sql import SparkSession if __name__ == "__main__": spark = SparkSession\ .builder\ .appName("BisectingKMeansExample")\ .getOrCreate() # 2. 以 libsvm 格式读取数据文件构造 DataFrame # 原始数据文件 sample_libsvm_data.txt 中的数据以行为一条数据, # 形如: 1.0 1.0 1.0,表示共有三个特征,特征值都为 1.0 dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") dataset.show() # 3. 设置参数,训练 KMeans 聚类模型 # setK(2) 表示聚成 2 个类 # seed 表示集群初始化时的随机种子 bkm = BisectingKMeans().setK(2).setSeed(1) model = bkm.fit(dataset)
# 4. 进行预测 predictions = model.transform(dataset) predictions.show() # 5. 通过计算误差平方和评价聚类模型 cost = model.computeCost(dataset) print("Within Set Sum of Squared Errors = " + str(cost)) # 6. 打印数据模型的中心点. print("Cluster Centers: ") centers = model.clusterCenters() for center in centers: print(center) # 7. 保存模型 model.save("model/bisecting_kmeans") # 8. 加载模型 sameModel = BisectingKMeansModel.load("model/bisecting_kmeans") # 9. 使用模型测试数据 data = [(0, Vectors.sparse(3, [0, 1, 2], [0.3, 0.3, 0.3])), (1, Vectors.sparse(3, [0, 1, 2], [3.7, 5.8, 4.8])), (2, Vectors.sparse(3, [0, 1, 2], [8.0, 8.1, 8.2]))] new_df = spark.createDataFrame(data, ["label", "features"]) new_df.show() print("new_df is belongs to clusters:") sameModel.transform(new_df).show() spark.stop() 运行结果,两个聚类中心: Cluster centers: [9.099999999999998,9.099999999999998,9.099999999999998] [0.1,0.1,0.1] 新数据预测: new_df is belongs to clusters: +-----+--------------------+----------+
|label| features|prediction| +-----+--------------------+----------+ 0| | | 1| 1| | +-----+--------------------+----------+ 模型保存在 model/bisecting_kmeans: 0|(3,[0,1,2],[0.3,0...| 1|(3,[0,1,2],[3.7,5...| 2|(3,[0,1,2],[8.0,8...|
分享到:
收藏