如何分析K-means Clustering
发表于:2024-10-28 作者:千家信息网编辑
千家信息网最后更新 2024年10月28日,如何分析K-means Clustering ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一:算法K-means 算法是机器学习
千家信息网最后更新 2024年10月28日如何分析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安全错误
数据库的锁怎样保障安全
软件开发 考证
网络安全的漏洞扫描业务
网络安全类的etf
服务器管理器如何使用
java做web开发操作数据库
软件开发投标方案模板
金税用什么软件开发的
qq音速服务器
易语言http服务器
正当防卫4显示服务器当前不可用
网络安全周信息日主题活动
手机热点解析服务器
黄浦区自动化软件开发项目信息
普通人自拍软件开发
数据库中怎么查看所有行
orcl手动修改表数据库
季度网络安全工作
阿里云虚机数据库不够
新天龙八部最新服务器
教育统计数据库
望京软件开发
弱电工程服务器去哪里买
宝山区软件开发信息推荐
软件开发合同应该注意什么
酒店数据库设计概念
温州凯乐斯网络技术有限公司
专科学校的计算机网络技术
做软件开发的男生性格特征
网络安全防护人员属于什么
虹口区使用软件开发诚信合作