具有单个输入变量的 kmeans 聚类图

Posted

技术标签:

【中文标题】具有单个输入变量的 kmeans 聚类图【英文标题】:kmeans clustering plot with a single input variable 【发布时间】:2019-09-10 11:41:14 【问题描述】:

我有一些看起来像这样的数据;

   id_row year_row      value
1 1031296     2012 0.13908350
2 1031296     2013 0.11825776
3 1031296     2014 0.03925923
4 1031296     2015 0.07821547
5 1031296     2016 0.04694897
6 1031296     2017 0.07790232

我可以按年份过滤并运行kmeans

kmdata <- results %>%
  filter(year_row == "2010")

km <- kmeans(as.vector(kmdata$value), centers = 4, iter.max = 10, nstart = 1)
km

但是,我想计算每一年的 kmeans 并查看每个 id_row 如何随时间改变集群。

由于数据不是矩阵,因此在尝试绘制模型时出现错误。

library(cluster) clusplot(kmdata$value, km$clusters, color=T, shade=T, labels=2, lines=0)

Error in is.list(s.x.2d) : x is not a data matrix

我使用的方法是“好的”吗?我在网上查看并找到了一些 kmeans 示例,发现其中许多示例使用多个 inputs,而我只有一个 cosine 相似度输入。

##         Murder Assault UrbanPop     Rape
## Alabama 1.2426   0.783   -0.521 -0.00342
## Alaska  0.5079   1.107   -1.212  2.48420
## Arizona 0.0716   1.479    0.999  1.04288

数据:

structure(list(id_row = c("1031296", "1031296", "1031296", "1031296", 
"1031296", "1031296", "1031296", "1031296", "1130310", "1130310", 
"1130310", "1130310", "1130310", "1130310", "1130310", "1130310", 
"1130310", "1130310", "1130310", "1130310", "1130310", "1130310", 
"1130310", "1137411", "1137411", "1336920", "1336920", "1336920", 
"1336920", "1336920", "1336920", "1336920", "1336920", "1336920", 
"1336920", "1336920", "1336920", "1336920", "1336920", "1336920", 
"1336920", "1336920", "1336920", "1336920", "1413329", "1413329", 
"1413329", "1413329", "1413329", "1413329", "1413329", "1413329", 
"1413329", "1413329", "1413329", "1413329", "1413329", "1413329", 
"1413329", "1413329", "1413329", "1413329", "1413329", "16732", 
"16732", "16732", "16732", "16732", "16732", "16732", "16732", 
"16732", "16732", "16732", "16732", "16732", "16732", "16732", 
"21344", "21344", "21344", "21344", "21344", "21344", "21344", 
"21344", "21344", "21344", "21344", "21344", "21344", "21344", 
"21344", "29989", "29989", "29989", "29989", "313616", "313616", 
"46989", "46989", "46989", "46989", "46989", "46989", "46989", 
"46989", "46989", "5513", "5513", "5513", "5513", "5513", "5513", 
"5513", "5513", "5513", "5513", "5513", "5513", "5513", "5513", 
"5513", "5513", "716823", "716823", "716823", "716823", "716823", 
"716823", "716823", "716823", "716823", "716823", "789073", "789073", 
"789073", "789073", "789073", "789073", "789073", "789073", "789073", 
"789073", "789073", "789073", "789073", "797468", "797468", "797468", 
"797468", "797468", "797468", "797468", "797468", "797468", "797468", 
"797468", "797468", "797468", "797468", "797468", "797468", "80661", 
"80661", "80661", "80661", "80661", "80661", "80661", "80661", 
"80661", "80661", "80661", "80661", "80661", "80661", "80661", 
"80661", "866787", "866787", "866787", "866787", "866787", "866787", 
"866787", "866787", "866787", "866787", "866787", "866787", "866787", 
"866787", "866787", "866787", "866787", "882184", "882184", "882184", 
"882184", "91142", "91142", "91142", "91142", "91142", "91142", 
"91142", "91142", "91142", "91142", "91142", "91142", "91142", 
"91142", "91142", "91142", "91142", "912595", "95521", "95521", 
"95521", "95521", "95521", "95521", "95521", "95521", "95521", 
"95521", "95521", "95521"), year_row = c("2012", "2013", "2014", 
"2015", "2016", "2017", "2018", "2019", "2004", "2005", "2006", 
"2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", 
"2015", "2016", "2017", "2018", "2003", "2004", "2001", "2002", 
"2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
"2019", "2003", "2003", "2004", "2004", "2005", "2006", "2007", 
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", 
"2016", "2017", "2018", "2019", "2002", "2003", "2004", "2005", 
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", 
"2016", "2017", "2018", "2005", "2006", "2007", "2008", "2009", 
"2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", 
"2018", "2019", "2005", "2006", "2007", "2008", "2010", "2011", 
"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
"2019", "2003", "2004", "2005", "2006", "2007", "2008", "2009", 
"2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", 
"2018", "2001", "2002", "2003", "2004", "2005", "2005", "2006", 
"2006", "2007", "2008", "2005", "2005", "2006", "2006", "2007", 
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", 
"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", 
"2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
"2004", "2005", "2006", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2016", "2017", "2017", "2018", "2019", 
"2006", "2006", "2007", "2007", "2008", "2008", "2009", "2010", 
"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
"2019", "2016", "2017", "2018", "2019", "2003", "2004", "2005", 
"2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2017", "2018", "2019", "2018", "2006", 
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", 
"2017", "2018", "2019"), value = c(0.139083502412409, 0.11825775641964, 
0.0392592265955874, 0.0782154662932015, 0.0469489736719239, 0.0779023179300866, 
0.0228012955999517, 0.0854168153956153, 0.999737539238827, 0.0443179732423611, 
0.0390309184765143, 0.0922585629702825, 0.0403666403458272, 0.0382194133579655, 
0.042698343847385, 0.0685255449505098, 0.0675200147346398, 0.0187881296791695, 
0.0429479468414007, 0.079743052611441, 0.0320744404500168, 0.0144941429460794, 
0.119160368459038, 0.0925697035527265, 0.083984708174856, 0.996283500380756, 
0.107778943258269, 0.173435313229931, 0.0900909715473757, 0.0197546332298797, 
0.144120296067433, 0.158299486589792, 0.186295755413315, 0.101668114945428, 
0.0539410318683912, 0.0436257634521463, 0.0469995547968916, 0.0297825730932798, 
0.0378571859484953, 0.0409750669985696, 0.0835845366556822, 0.0461210474287448, 
0.0327580476668409, 0.177115131073337, 0.159254253746574, 0.165016169958592, 
0.217868629318303, 0.218151233840694, 0.0295314037649514, 0.350667808112922, 
0.04872107872219, 0.0428538370791108, 0.0702414653935244, 0.0509909654321864, 
0.021307630695821, 0.0487040360447408, 0.041478962700618, 0.0899399982611924, 
0.0596779333637508, 0.0594380923275606, 0.0260485423561843, 0.0227124484448211, 
0.0283345344486783, 0, 0, 0.987417394803821, 0.977452829626341, 
0.0935080361786257, 0.0399062483581079, 0.0597891120112862, 0.315545198466048, 
0.163328528827512, 0.0874148150892009, 0.0510720020721022, 0.0667940605980389, 
0.169532406681824, 0.0910555503799401, 0.0279487917930926, 0.10928052636183, 
0.123476844322464, 0.103160715130179, 0.103249999036791, 0.0745839591361995, 
0.0631175647480072, 0.184211621364709, 0.0215167736361518, 0.0245822231545278, 
0.0989784724113916, 0.0229286224340945, 0.0226191481684307, 0.0233422198272636, 
0.0273923715753037, 0.0252371778483782, 0.995932814180916, 0.173246569547786, 
0.0803668586813332, 0.117020596135848, 0, 0, 0.166465264703167, 
0.121736420297069, 0.222592282376611, 0.112875298902015, 0.239757945494177, 
0.06973597297872, 0.0830930852483126, 0.0805690109704797, 0.0616970606582679, 
0.949058915832725, 0.772825147232639, 0.275521756883282, 0.104905821737462, 
0.190089446388639, 0.104877738913191, 0.0451743677658758, 0.107005078500435, 
0.501394828959975, 0.469521731740851, 0.52003539194839, 0.467749776421354, 
0.354695678996227, 0.122712271145558, 0.416883650557191, 0.19336131647959, 
0.0617013322716825, 0.164405233667766, 0.231328666854185, 0.13516176196116, 
0.244769963995398, 0.245233564251184, 0.0202645676328879, 0.0203938119548491, 
0.0440061980952809, 0.119647769350871, 0.788760048600453, 0.52096301163371, 
0.894490022586396, 0, 0.915841803524472, 0.18031433341574, 0.203234762827244, 
0.228630682218131, 0.0912296950189682, 0.136106113682158, 0.164573356080639, 
0.0745781930106895, 0.150260763176162, 0.158653568728859, 0.0783486847140882, 
0.0869476996735634, 0.0324141335754994, 0.0898424570938522, 0.0363991230061337, 
0.032310166107677, 0.0209754067589013, 0.265484318305701, 0.113478924043708, 
0.0186602705559273, 0.0255246104570098, 0.056393297717265, 0.0857604028464242, 
0.0124478249166918, 0.00637473097535723, 0.207577271505867, 0.337100773405183, 
0.0646190164032464, 0.0917033805466042, 0.196505785433459, 0.331131037406129, 
0.210704702017685, 0.0637807753855683, 0.0539481325014424, 0.0989683802933529, 
0.524316699544961, 0.507211406678685, 0.0528130064031331, 0.0492601567601492, 
0.0952275608333137, 0.231443497541783, 0.0923624848840547, 0.0512562995607162, 
0.0899452189237439, 0.0899452189237439, 0.196385666544902, 0.196385666544902, 
0.0860496103484817, 0.0828699425192967, 0.0782477404202879, 0.0604891402552598, 
0.0620081387111392, 0.0581289157948599, 0.139040164810116, 0.121876448051833, 
0.0469641320576142, 0.0584450497367173, 0.0683450569694576, 0.107780652102444, 
0.0343457213273257, 0.318083029206905, 0.057398518201345, 0.134372218626067, 
0.159580001800562, 0.089498808618003, 0.0802305351945032, 0.121212589768212, 
0.0941452821751688, 0.146898998896027, 0.0785225299750667, 0.0507434601283108, 
0.0850646939602678, 0.121330800725537, 0.0186249957267043, 0.0693968500893254, 
0.0183033849029344, 0.0375008562807299, 0.0310986292138113, 0.0225677736567973, 
0.059073285118026, 0.892838347294089, 0.0311951595296633, 0.026834748568959, 
0.0472249488059499, 0.125624455369426, 0.0861728208246999, 0.0702399536446421, 
0.0265279690855791, 0.083416879130688, 0.0463856364022548, 0.131546576568187, 
0.058743275128742)), row.names = c(NA, -230L), class = "data.frame")

【问题讨论】:

【参考方案1】:

您可以使用 nest 创建嵌套的 tibbles,然后将 kmeans 应用于每个组:

library(tidyverse)
x <- results %>% 
  as_tibble() %>% 
  select(-id_row) %>% 
  group_by(year_row) %>% 
  nest(.key = "value") %>%
  filter(map_int(value, nrow)> 4) %>% 
  mutate(kmeans = map(value, ~kmeans(.x[[1]], centers = 4, iter.max = 10, nstart = 1)))

请注意,我过滤了一些年份,因为它们没有足够的观察结果。

然后你可以像这样制作一个clusterplot:

cluster::clusplot(x$value[[1]], x$kmeans[[1]]$cluster)

【讨论】:

谢谢!如何使用cusplot() 绘制一年的结果? plot(unlist(res$kmeans[[10]])) 谢谢!但是,我收到以下错误; Error in is.list(s.x.2d) : cannot use 'cor = TRUE' with a constant variable 对我来说它运行没有错误。也许特定的行会导致问题。尝试在问题中指定此问题或提出新问题。 我打开了一个新问题,因为它完全不同***.com/questions/55775654/…

以上是关于具有单个输入变量的 kmeans 聚类图的主要内容,如果未能解决你的问题,请参考以下文章

opencv kmeans 聚类的输入矩阵

opencv kmeans 聚类的输入矩阵

标准化 PC 的 KMeans 聚类图

C#:[2D 演示]聚类算法:Kmean & FCM

matlab实现图像检索,在用小波变换提取特征后,怎样用B+树实现kmeans聚类,而不用输入k值

使用 R 中的 wordcloud 从聚类向量中显示单个 kmeans 聚类