K- साधनों के लिए अंतर आँकड़ा एक क्लस्टर का सुझाव क्यों देता है, भले ही स्पष्ट रूप से उनमें से दो हैं?


19

मैं अपने डेटा को क्लस्टर करने के लिए K- साधनों का उपयोग कर रहा हूं और "इष्टतम" क्लस्टर संख्या का सुझाव देने के लिए रास्ता ढूंढ रहा हूं। एक अच्छा क्लस्टर नंबर खोजने के लिए गैप आँकड़े एक सामान्य तरीका लगता है।

किसी कारण से यह इष्टतम क्लस्टर संख्या के रूप में 1 लौटाता है, लेकिन जब मैं डेटा को देखता हूं तो यह स्पष्ट होता है कि 2 क्लस्टर हैं:

! [1] (http://i60.tinypic.com/28bdy6u.jpg)

इस तरह से मैं आर में गैप कहता हूं:

gap <- clusGap(data, FUN=kmeans, K.max=10, B=500)
with(gap, maxSE(Tab[,"gap"], Tab[,"SE.sim"], method="firstSEmax"))

परिणाम सेट:

> Number of clusters (method 'firstSEmax', SE.factor=1): 1
          logW   E.logW           gap    SE.sim
[1,]  5.185578 5.085414 -0.1001632148 0.1102734
[2,]  4.438812 4.342562 -0.0962498606 0.1141643
[3,]  3.924028 3.884438 -0.0395891064 0.1231152
[4,]  3.564816 3.563931 -0.0008853886 0.1387907
[5,]  3.356504 3.327964 -0.0285393917 0.1486991
[6,]  3.245393 3.119016 -0.1263766015 0.1544081
[7,]  3.015978 2.914607 -0.1013708665 0.1815997
[8,]  2.812211 2.734495 -0.0777154881 0.1741944
[9,]  2.672545 2.561590 -0.1109558011 0.1775476
[10,] 2.656857 2.403220 -0.2536369287 0.1945162

क्या मैं कुछ गलत कर रहा हूं या कोई अच्छा क्लस्टर नंबर पाने का बेहतर तरीका जानता है?

जवाबों:


37

क्लस्टरिंग अन्य बातों के अलावा, पैमाने पर निर्भर करता है । इस मुद्दे की चर्चा के लिए देखें ( अंतर अन्य ) आपको डेटा कब केंद्र और मानकीकृत करना चाहिए? और covariance या सहसंबंध पर पीसीए?

आपके डेटा को 1: 1 पहलू अनुपात के साथ तैयार किया गया है, जिससे पता चलता है कि दो चर के पैमाने कितने भिन्न हैं:

आकृति 1

इसके दाईं ओर, गैप स्टैटिस्टिक्स का प्लॉट ऊर्ध्वाधर खंडों के साथ खींची गई मानक त्रुटियों और एक ऊर्ध्वाधर धराशायी नीली रेखा के साथ चिह्नित कश्मीर के इष्टतम मूल्य के साथ समूहों ( ) की संख्या से आंकड़े दिखाता है । सहायता के अनुसार ,kkclusGap

kf(k)

k=1

ab

चित्र 2

k=2k{1,2,3,4,5}k=2kk=1kk=2। उन्हें यहां केवल सामान्य विधि का वर्णन करने के लिए दिखाया गया है।


Rइन आंकड़ों का उत्पादन करने के लिए यहाँ कोड है। डेटा लगभग प्रश्न में दिखाए गए से मेल खाते हैं।

library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
        34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
        38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
  #
  # Estimate optimal cluster count and perform K-means with it.
  #
  gap <- clusGap(xy, kmeans, K.max=10, B=500)
  k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
  fit <- kmeans(xy, k)
  #
  # Plot the results.
  #
  pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
  plot(xy, asp=1, main=title, pch=pch, col=col)
  plot(gap, main=paste("Gap stats,", title))
  abline(v=k, lty=3, lwd=2, col="Blue")
  #
  # Prepare for the next step.
  #
  xy <- apply(xy, 2, scale)
  title <- "Standardized data"
}

स्पष्टीकरण के लिए ठीक है धन्यवाद। Btw: क्या आप अंतर सांख्यिकी जैसे किसी अन्य क्लस्टर मीट्रिक को जानते हैं? मुझे कुछ मिला, लेकिन मुझे नहीं पता कि आमतौर पर k- साधनों के साथ किसका उपयोग किया जाता है?
मिकहुबर

+1। बहुत अच्छा प्रदर्शन, और यह प्रभावशाली है कि आप एक ही डेटा प्राप्त करने के लिए डिजीटल ओपी के आंकड़े को देखते हैं।
अमीबा का कहना है कि मोनिका

3
@amoeba मैंने स्कैटलपॉट को देखा और निर्देशांक में टाइप किया जैसा कि आप यहां देख रहे हैं (यानी इसमें शामिल अंक मेरी अपनी उंगलियां :-) थे)। कभी-कभी सबसे सरल दृष्टिकोण कुशल होता है।
whuber

क्या सांख्यिक मूल्यों के एकल 1-डी सरणी में गुच्छों की संख्या ज्ञात करने के लिए गैप स्टेटिस्टिक का उपयोग किया जा सकता है?
user1971988

xyxy <- xy[, 1, drop=FALSE]n×1R(xi)(xi,0)

9

xyK=1K>1 ; आप जो निरीक्षण करते हैं वह अशक्तता को अस्वीकार करने में असमर्थता है। कृपया ध्यान दें कि । जीएपी सांख्यिकी का वर्णन करने वाला पद्धतिगत पेपरयदि आप तकनीकी विवरणों को अधिक जांचना चाहते हैं तो ऑनलाइन उपलब्ध है

मैं एक सामान्यीकरण मॉडल (GMM - का सामान्यीकरण) का उपयोग करके आपका मॉडल चलाता हूं k2×2k -means आपका सहसंयोजक मैट्रिक्स अधिक संरचित है (आप सहसंबंधों को नहीं देखते हैं) लेकिन मैं यहां उस मामले पर ध्यान केंद्रित नहीं करूंगा।)

kK=2


+1: आपने प्लॉट को ध्यान से पढ़कर संभावित समस्या को देखा: अच्छा किया! हस्ती के पेपर का लिंक आपके उत्तर के लिए भी स्वागत योग्य है।
whuber

@ शुभंकर: हम तराजू के बारे में यह चर्चा करते थे, क्या हम नहीं? :)
us Monr11852

यह एक ऐसा अलग संदर्भ था जिससे मैंने संबंध नहीं बनाया ...।
whuber

यह वास्तव में एक अलग संदर्भ था; मैंने इसका उल्लेख सिर्फ इसलिए किया क्योंकि यह "तराजू" था, और यहाँ "तराजू" था।
us --r11852

0

मुझे मूल पोस्टर के समान ही समस्या थी। R प्रलेखन वर्तमान में कहता है कि d.power = 1 की मूल और डिफ़ॉल्ट सेटिंग गलत थी और इसे d.power द्वारा प्रतिस्थापित किया जाना चाहिए: "डिफ़ॉल्ट, d.power = 1," ऐतिहासिक "R कार्यान्वयन से मेल खाती है, जबकि d.power = 2 से मेल खाती है जो तिब्शीरानी एट अल ने प्रस्तावित किया था। यह जुआन गोंजालेज द्वारा 2016-02 में पाया गया था। "

नतीजतन, d.power = 2 को बदलने से मेरे लिए समस्या हल हो गई।

https://www.rdocumentation.org/packages/cluster/versions/2.0.6/topics/clusGap

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.