Spark实现K-Means算法代码示例
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个
千家信息网最后更新 2025年02月03日Spark实现K-Means算法代码示例
K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。
MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个聚类的类簇中心。初始的类簇中心,可以是随机的,也可以是KMean||得来的,迭代达到一定的次数,或者所有run都收敛时,算法就结束。
用Spark实现K-Means算法,首先修改pom文件,引入机器学习MLlib包:
org.apache.spark spark-mllib_2.10 1.6.0
代码:
import org.apache.log4j.{Level,Logger}import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.linalg.Vectorsobject Kmeans { def main(args:Array[String]) = { // 屏蔽日志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.jetty.server").setLevel(Level.OFF) // 设置运行环境 val conf = new SparkConf().setAppName("K-Means").setMaster("spark://master:7077") .setJars(Seq("E:\\Intellij\\Projects\\SimpleGraphX\\SimpleGraphX.jar")) val sc = new SparkContext(conf) // 装载数据集 val data = sc.textFile("hdfs://master:9000/kmeans_data.txt", 1) val parsedData = data.map(s => Vectors.dense(s.split(" ").map(_.toDouble))) // 将数据集聚类,2个类,20次迭代,形成数据模型 val numClusters = 2 val numIterations = 20 val model = KMeans.train(parsedData, numClusters, numIterations) // 数据模型的中心点 println("Cluster centres:") for(c <- model.clusterCenters) { println(" " + c.toString) } // 使用误差平方之和来评估数据模型 val cost = model.computeCost(parsedData) println("Within Set Sum of Squared Errors = " + cost) // 使用模型测试单点数据 println("Vectors 7.3 1.5 10.9 is belong to cluster:" + model.predict(Vectors.dense("7.3 1.5 10.9".split(" ") .map(_.toDouble)))) println("Vectors 4.2 11.2 2.7 is belong to cluster:" + model.predict(Vectors.dense("4.2 11.2 2.7".split(" ") .map(_.toDouble)))) println("Vectors 18.0 4.5 3.8 is belong to cluster:" + model.predict(Vectors.dense("1.0 14.5 73.8".split(" ") .map(_.toDouble)))) // 返回数据集和结果 val result = data.map { line => val linevectore = Vectors.dense(line.split(" ").map(_.toDouble)) val prediction = model.predict(linevectore) line + " " + prediction }.collect.foreach(println) sc.stop }}
使用textFile()方法装载数据集,获得RDD,再使用KMeans.train()方法根据RDD、K值和迭代次数得到一个KMeans模型。得到KMeans模型以后,可以判断一组数据属于哪一个类。具体方法是用Vectors.dense()方法生成一个Vector,然后用KMeans.predict()方法就可以返回属于哪一个类。
运行结果:
Cluster centres: [6.062499999999999,6.7124999999999995,11.5] [3.5,12.2,60.0]Within Set Sum of Squared Errors = 943.2074999999998Vectors 7.3 1.5 10.9 is belong to cluster:0Vectors 4.2 11.2 2.7 is belong to cluster:0Vectors 18.0 4.5 3.8 is belong to cluster:10.0 0.0 5.0 00.1 10.1 0.1 01.2 5.2 13.5 09.5 9.0 9.0 09.1 9.1 9.1 019.2 9.4 29.2 05.8 3.0 18.0 03.5 12.2 60.0 13.6 7.9 8.1 0
总结
本文关于Spark实现K-Means算法代码示例的全部内容就到这里,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈七种常见的Hadoop和Spark项目案例、Spark的广播变量和累加器使用方法代码示例、Spark入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!
算法
方法
数据
模型
迭代
代码
运行
示例
朋友
次数
装载
中心点
使用方法
兴趣
内容
原理
变量
多个
常见
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库视图如何加字段
网络安全状元
淄博crm软件开发价格
数据库数据全部变成问号
vpn服务器美国
我的世界类似战斗服务器
密云区信息化软件开发价格走势
nginx隐藏服务器ip目录
公司信息网络安全管理
网络安全在我身边画
牌张数据库
易乐网络技术有限公司
济南兰赛网络技术有限公司张红稳
输入框内容上传至云数据库
专门做某个业务的软件开发
上海虹镜网络技术有限公司
获取微信窗口数据库
服务器没有权限破坏
硚口好的软件开发团队
我的世界服务器没钱续费
网络安全领域中肉鸡是指
嵌入式软件开发认证
我的世界类似战斗服务器
贵州正规软件开发厂家现货
sql数据库变测试版
达梦数据库运行环境要求
邮件服务器在哪里获得
网络安全从业人员高校排行
学习内蒙古网络安全
金华哪里有学习网络安全