如何分析K-means Clustering
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何分析K-means Clustering ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:算法K-means 算法是机器学习
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
北京路客互联网科技有限公司
腾讯阿里互联网科技
互联网金融公司科技
北京禾田雨橡互联网科技
齐家互联网科技有限公司
互联网科技英文翻译
西藏七维空间互联网科技有限公司
来此购互联网科技有限公司
互联网和黑科技的看法
智腾互联网科技有限公司
华夏互联网科技业
想开互联网科技公司怎么样
企晟互联网信息科技有限公司
中科明德北京互联网科技
合肥互联网科技公司公章图片
互联网科技实习生岗位
互联网科技手机排行榜
互联网科技机房
前海云享互联网科技
互联网科技快速发展优美句子
手磨咖啡
苏州找大状互联网科技有限公司
一五八零互联网科技
重庆威客帮互联网科技
广州恒生互联网科技有限
湖南诚度互联网科技有限公司
互联网科技创新服务
广州市恰铎互联网科技有限公司
工业互联网科技成果转化
互联网科技包装股份有限公司上市