R语言最优聚类数目k改进kmean聚类算法

原文链接:http://tecdat.cn/?p=7237

在本文中,我们将探讨应用聚类算法(例如k均值和期望最大化)来确定集群的最佳数量时所遇到的问题之一。从数据集本身来看,确定集群数量的最佳值的问题通常不是很清楚。在本文中,我们将介绍几种技术,可用于帮助确定给定数据集的最佳k值。

 我们将在当前的R Studio环境中下载数据集:

 StudentKnowledgeData <-read_csv(“ YourdownloadFolderPath / StudentKnowledgeData.csv”)

预处理

 由于此数据集的特征向量较低,因此我们将不关注特征选择方面,而是将使用所有可用特征。


summary(myDataClean)
[1] 402   5
      STG              SCG              STR              LPR
 Min.   :0.0000   Min.   :0.0000   Min.   :0.0100   Min.   :0.0000
 1st Qu.:0.2000   1st Qu.:0.2000   1st Qu.:0.2700   1st Qu.:0.2500
 Median :0.3025   Median :0.3000   Median :0.4450   Median :0.3300
 Mean   :0.3540   Mean   :0.3568   Mean   :0.4588   Mean   :0.4324
 3rd Qu.:0.4800   3rd Qu.:0.5100   3rd Qu.:0.6800   3rd Qu.:0.6500
 Max.   :0.9900   Max.   :0.9000   Max.   :0.9500   Max.   :0.9900

一旦完成预处理,以确保数据已准备就绪,可用于进一步的应用。

scaled_data = as.matrix(scale(myDataClean))

聚类算法– k表示在其中找到最佳聚类数的示例

让我们尝试为该数据创建聚类。

让我们从k = 3开始并检查结果。


kmm
K-means clustering with 3 clusters of sizes 93, 167, 142

Cluster means:
           STG        SCG        STR        LPR        PEG
1  0.573053974  0.3863411  0.2689915  1.3028712  0.1560779
2 -0.315847301 -0.4009366 -0.3931942 -0.1794893 -0.8332218
3 -0.003855777  0.2184978  0.2862481 -0.6421993  0.8776957

Clustering vector:
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21
...................................................................................

Within cluster sum of squares by cluster:
[1] 394.5076 524.4177 497.7787
 (between_SS / total_SS =  29.3 %)

Available components:
[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"  

当我们检查(between_SS / total_SS)时,发现它很低。该比率实际上说明了群集之间数据点的平方总和。我们想要增加此值,并且随着群集数量的增加,我们看到它增加,但是我们不想过度拟合数据。因此,我们看到在k = 401的情况下,我们将拥有402个完全适合数据的簇。因此,我们的想法是找到一个k值,对于该值,模型不会过拟合,并且同时根据实际分布对数据进行聚类。现在让我们探讨如何解决找到最佳数目的群集的问题。

肘法

如果将集群解释的方差百分比相对于集群数量作图,则第一个集群会添加很多信息(说明很多方差),但在某个点上边际增益会下降,从而在图形。此时选择簇的数量,因此选择“肘部标准”。


wss
plot(1:k.max, wss,
     type="b", pch = 19, frame = FALSE,
     xlab="Number of clusters K",
     ylab="Total within-clusters sum of squares")
 [1] 2005.0000 1635.8573 1416.7041 1253.9959 1115.4657 1026.0506  952.4835  887.7202
 [9]  830.8277  780.2121  735.6714  693.7745  657.0939  631.5901  608.3576

该图可以在下面看到:

?

因此,对于k = 4,与其他k相比,between_ss / total_ss比率趋于缓慢变化且变化较小。因此对于该数据,k = 4应该是群集数量的一个不错的选择,

k均值的贝叶斯推断标准

k均值模型“几乎”是高斯混合模型,因此可以构造高斯混合模型的似然性,从而确定信息标准值。


d_clust$BIC
plot(d_clust)
Bayesian Information Criterion (BIC):
         EII       VII       EEI       VEI       EVI       VVI       EEE       EVE
1  -5735.105 -5735.105 -5759.091 -5759.091 -5759.091 -5759.091 -5758.712 -5758.712
2  -5731.019 -5719.188 -5702.988 -5635.324 -5725.379 -5729.256 -5698.095 -5707.733
3  -5726.577 -5707.840 -5648.033 -5618.274 -5580.305 -5620.816 -5693.977 -5632.555
..................................................................................
         VEE       VVE       EEV       VEV       EVV       VVV
1  -5758.712 -5758.712 -5758.712 -5758.712 -5758.712 -5758.712
2  -5704.051 -5735.383 -5742.110 -5743.216 -5752.709 -5753.597
3  -5682.312 -5642.217 -5736.306 -5703.742 -5717.796 -5760.915
..............................................................

Top 3 models based on the BIC criterion:
    EVI,3     EVI,4     EEI,5
-5580.305 -5607.980 -5613.077
> plot(d_clust)
Model-based clustering plots: 

1: BIC
2: classification
3: uncertainty
4: density

Selection: 1

可以在下面看到该图,其中k = 3和k = 4是可用的最佳选择。

?

从这两种方法可以看出,我们可以在一定程度上确定对于聚类问题而言,聚类数的最佳值是多少。几乎没有其他技术可以使用。


hist(nb$Best.nc[1,], breaks = max(na.omit(nb$Best.nc[1,])))

在此有一个重要的要点,即对于每个群集大小,此方法始终考虑大多数索引。因此,重要的是要了解哪些索引与数据相关,并根据该索引确定最佳选择是建议的最大值还是任何其他值。
正如我们在下面查看“第二差分D-index”图所看到的,很明显,最佳聚类数是k = 4。

?

如果您有任何疑问,请在下面发表评论。

?

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

?QQ:3025393450

?QQ交流群:186388004 

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询

欢迎选修我们的R语言数据分析挖掘必知必会课程!

原文地址:https://www.cnblogs.com/tecdat/p/11597016.html

时间: 2024-10-28 04:05:48

R语言最优聚类数目k改进kmean聚类算法的相关文章

R 语言的优劣势是什么?

R 语言的优劣势是什么? 2015-05-27 程序员 大数据小分析 R,不仅仅是一种语言 本文原载于<程序员>杂志2010年第8期,因篇幅所限,有所删减,这里刊登的是全文. 工欲善其事,必先利其器,作为一个战斗在IT界第一线的工程师,C/C++.java.perl.python.ruby.php.javascript.erlang等等等等,你手中总有一把使用自如的刀,帮助你披荆斩棘. 应用场景决定知识的储备与工具的选择,反过来,无论你选择了什么样的工具,你一定会努力地把它改造成符合自己应用场

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖

Bagging算法的R语言实现

bagging 是bootstrap aggregating的缩写,是第一批用于多分类集成算法. bagging算法如下: 循环K次,每次都从样本集D中有放回地抽取样本集Di,这样总共得到k个样本集,用这K个样本集进行决策树生成,获得K个决策树模型,再将要检测的数据用这K个决策树模型进行多数表决,获得票数多的结论. 这种思想跟现代民主投票制度如出一辙,一个人再厉害,判断力也是有限的,但是把一群人聚合在一起投票,那单个人所犯错误的概率就会被抵消,最后得出结论的正确性会明显优于单个人做出决策. 个人

聚类分析-R语言

1.随机生成三个簇点: > c1<-cbind(rnorm(30,2,1),rnorm(30,2,1)) > c2<-cbind(rnorm(30,3,1),rnorm(30,20,1)) > c3<-cbind(rnorm(30,15,1),rnorm(30,25,1)) > v=rbind(c1,c2,c3) 查看分布情况 > plot(v) 图 1 产生的随机数据 2.K聚类 像PAM这样的K-中心点算法(常见的K-means,K-medois等等)在

R语言与数据分析之四:聚类算法2

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">今天继续和小伙伴们分享聚类算法和R语言的实现,上篇和大家分享了聚类中的距离.类间距离和最古典的层次聚类法,今天和大家分享几个动态聚类算法.</span> 首先和大家分享被评为十大数据挖掘算法之一的K-means 算法(K为分类的个数,mean为平均值,该算法的难点即为K的指点

R语言确定聚类的最佳簇数:3种聚类优化方法

原文链接:http://tecdat.cn/?p=7275 确定数据集中最佳的簇数是分区聚类(例如k均值聚类)中的一个基本问题,它要求用户指定要生成的簇数k. 一个简单且流行的解决方案包括检查使用分层聚类生成的树状图,以查看其是否暗示特定数量的聚类.不幸的是,这种方法也是主观的. 我们将介绍用于确定k均值,k medoids(PAM)和层次聚类的最佳聚类数的不同方法. 这些方法包括直接方法和统计测试方法: 直接方法:包括优化准则,例如簇内平方和或平均轮廓之和.相应的方法分别称为弯头方法和轮廓方法

基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登后,陆陆续续收到本科生.研究生还有博士生的来信和短信微信等,表示了对论文的兴趣以及寻求算法的效果和实现细节,所以,我也就通过邮件或者短信微信来回信,但是有时候也会忘记回复. 另外一个原因也是时间久了,我对于论文以及改进的算法的记忆也越来越模糊,或者那天无意间把代码遗失在哪个角落,真的很难想象我还会全

R语言与数据分析之四:聚类算法1

前面和大家分享的分类算法属于有监督学习的分类算法,今天继续和小伙伴们分享无监督学习分类算法---聚类算法.聚类算法也因此更具有大数据挖掘的味道 聚类算法本质上是基于几何距离远近为标准的算法,最适合数据是球形的问题,首先罗列下常用的距离: 绝对值距离(又称棋盘距离或城市街区距离) Euclide距离(欧几里德距离,通用距离) Minkowski 距离(闵可夫斯基距离),欧几里德距离 (q=2).绝对值距离(q=1)和切比雪夫距离(q=无穷大),这些都是闵可夫斯基的特殊情况. Chebyshew(切

R语言聚类(K-Means、层次)

R语言聚类 K-Means 1. 随机生成3个簇点 > c1=cbind(rnorm(20,2,1),rnorm(20,2,1)) > c2=cbind(rnorm(20,3,2),rnorm(20,15,3)) > c3=cbind(rnorm(20,20,2),rnorm(20,20,3)) > v=rbind(c1,c2,c3) 在图中看看这三个簇的分布 > plot(v) 如图, 2. K聚类 clara(x, k),K聚类函数 x是数据集,可以是矩阵或者数据框 k是