如何分析K-means Clustering
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,如何分析K-means Clustering ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:算法K-means 算法是机器学习
千家信息网最后更新 2025年12月01日如何分析K-means Clustering
如何分析K-means Clustering ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一:算法
K-means 算法是机器学习 聚类算法中很常用,也是最基本的一种算法。聚类算法属于无监督学习算法。算法的步骤分为以下两步:1,根据分组大小K的值,找出K个中心点,而这时候其他点也根据距离中心点的距离划分给这个中心点。2,找出每个cluster最优的中心点,重新分配点,并迭代。
二:Spark MLlib
Spark MLlib 提供了K-means算法的实现。
数据来源
数据来源于KDD CUP网站,这些数据是网络连接的数据,下载
找到data -> kddcup.data.zip 并下载。
数据每行格式如下:
0,tcp,http,SF,215,45076, 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1, 0.00,0.00,0.00,0.00,1.00,0.00,0.00,0,0,0.00, 0.00,0.00,0.00,0.00,0.00,0.00,0.00,normal.
除了最后一个为label外,其余的都是features。label可能并不准确,这些label仅仅标示能发现的异常,但是k-means却能找到未知的异常。
2.读取数据
val rawDataPath = "Your kddcup.data.txt Path" val rawData = sc.textFile(rawDataPath) val labelsAndData = rawData.flatMap { line => val buffer = line.split(',').toBuffer if (buffer.length == 42) { buffer.remove(1, 3) val label = buffer.remove(buffer.length - 1) val vector = Vectors.dense(buffer.map(_.toDouble).toArray) Some(label, vector) } else { None } }数据除掉了第2,3,4列,最后一列数据。
3. K-Means算法
val kmeans = new KMeans() kmeans.setK(k) //默认的K为2 kmeans.setRuns(10) //找寻中心点运行次数 kmeans.setEpsilon(1.0e-6) //找寻中心点每次变化距离,越小越远 val model = kmeans.run(data)
使用生成的model并聚类
val clusterLabelCount = labelsAndData.map { case (label,datum) => val cluster = model.predict(datum) (cluster,label) }.countByValue clusterLabelCount.toSeq.sorted.foreach {case ((cluster,label),count) =>println(f"$cluster%1s$labels$count%8s")}4.如何选择K
K的选择是个问题,正常说来,K值越大,聚类的效果越好。想象下,如果每个点都是单独的一个类。。
另外,我们可以使用其他点距离中心点的距离来查看聚类的效果:
def distance(a: Vector, b: Vector) = { math.sqrt(a.toArray.zip(b.toArray).map(p => p._1 - p._2).map(p => p*p).sum) } def distToCentroid(datum: Vector, model: KMeansModel) = { val cluster = model.predict(datum) val centroid = model.clusterCenters(cluster) distance(centroid, datum) } def clusteringScore(data: RDD[Vector], k: Int) = { val kmeans = new KMeans() kmeans.setK(k) kmeans.setRuns(10) kmeans.setEpsilon(1.0e-6) val model = kmeans.run(data) data.map(datum => distToCentroid(datum, model)).mean() } (30 to 150 by 10 ).map(k => clusteringScore(data,k)).foreach(println)有了评估,我们可以依次查看K的大小对聚类的影响。
关于如何分析K-means Clustering 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
算法
数据
中心点
问题
分析
大小
效果
更多
来源
学习
帮助
解答
选择
易行
简单易行
内容
小伙
小伙伴
常用
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
昆仑通态4g触摸屏连接服务器
数据库实体关系识别
java能操作数据库吗
数据库nvl
怎么样知道自己电脑的服务器地址
网络安全主题20个字
管家婆服务器sa密码
互联网高科技水泥
西双版纳回收服务器
济南做网络安全的公司
手机网络安全
校园招聘软件数据库笔试题
数据库安全需求是什么原因
myql 恢复 数据库
诛仙2单机版gm数据库连不上
网络安全短视频征集启事
软件开发后端是什么
数据库全
怎么租国外的服务器
fgo安卓服务器连接失败
企业开发云服务器安全
java能操作数据库吗
饥荒专用服务器大型mod
温州职业软件开发
中国先进的软件开发公司
电力公司违反网络安全事例
软件开发经理收入
oa软件开发报价多少
大数据时代的网络安全等级保护
网络安全距离怎么计算