เหตุใดสถิติของช่องว่างสำหรับ k-mean จึงแนะนำหนึ่งคลัสเตอร์แม้ว่าจะมีอยู่สองกลุ่มก็ตาม


19

ฉันกำลังใช้ K- หมายถึงการจัดกลุ่มข้อมูลของฉันและกำลังมองหาวิธีการแนะนำหมายเลขคลัสเตอร์ "ดีที่สุด" สถิติ Gap น่าจะเป็นวิธีการทั่วไปในการค้นหาหมายเลขคลัสเตอร์ที่ดี

ด้วยเหตุผลบางอย่างมันคืนค่า 1 เป็นหมายเลขคลัสเตอร์ที่ดีที่สุด แต่เมื่อฉันดูข้อมูลมันชัดเจนว่ามี 2 คลัสเตอร์:

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

นี่คือวิธีที่ฉันเรียกช่องว่างใน R:

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

การจัดกลุ่มขึ้นอยู่กับขนาดเหนือสิ่งอื่นใด สำหรับการสนทนาของปัญหานี้ดู ( อนึ่ง ) คุณควรจัดกึ่งกลางและจัดทำข้อมูลมาตรฐานเมื่อใด และPCA เกี่ยวกับความแปรปรวนร่วมหรือสหสัมพันธ์? .

ต่อไปนี้เป็นข้อมูลของคุณที่ดึงมาด้วยอัตราส่วน 1: 1 เพื่อแสดงว่าสเกลของตัวแปรสองตัวนั้นแตกต่างกันมากเพียงใด:

รูปที่ 1

ทางด้านขวาพล็อตของสถิติช่องว่างแสดงสถิติตามจำนวนของกลุ่ม ( ) ที่มีข้อผิดพลาดมาตรฐานที่วาดด้วยเซ็กเมนต์แนวตั้งและค่าที่เหมาะสมที่สุดของk ที่ทำเครื่องหมายด้วยเส้นสีน้ำเงินเส้นประแนวตั้ง ตามความช่วยเหลือkkclusGap

วิธีการเริ่มต้น "firstSEmax" ค้นหาเล็กที่สุดซึ่งค่าf ( k )นั้นไม่เกินข้อผิดพลาดมาตรฐานมากกว่า 1 ข้อผิดพลาดจากสูงสุดแรกในท้องถิ่นkf(k)

วิธีการอื่น ๆ ทำงานในทำนองเดียวกัน เกณฑ์นี้ไม่ก่อให้เกิดการใด ๆ ของสถิติช่องว่างที่จะยืนออกผลในการประมาณการของ 1k=1

ตัวเลือกขนาดขึ้นอยู่กับแอปพลิเคชัน แต่จุดเริ่มต้นเริ่มต้นที่สมเหตุสมผลคือการวัดการกระจายตัวของข้อมูลเช่น MAD หรือค่าเบี่ยงเบนมาตรฐาน พล็อตนี้ทำการวิเคราะห์ซ้ำหลังจากปรับเข้าศูนย์อีกครั้งและลดขนาดเพื่อให้ค่าเบี่ยงเบนมาตรฐานของหน่วยสำหรับแต่ละองค์ประกอบและb :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-mean?
MikeHuber

+1 การสาธิตที่ดีมากและน่าประทับใจที่คุณดูเหมือนจะมีตัวเลขของ OP ดิจิทัลในการรับข้อมูลเดียวกัน
อะมีบากล่าวว่า Reinstate Monica

3
@ amoeba ฉันจ้องมอง scatterplot และพิมพ์ในพิกัดตามที่คุณเห็นที่นี่ (นั่นคือตัวเลขที่เกี่ยวข้องคือนิ้วมือของฉัน :-)) บางครั้งวิธีที่ง่ายที่สุดก็มีประสิทธิภาพ
whuber

สามารถใช้สถิติช่องว่างเพื่อค้นหาจำนวนกลุ่มในอาร์เรย์ 1-d เดียวของค่าตัวเลขได้หรือไม่?
user1971988

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

9

xyK=1K>1ไม่สามารถที่จะปฏิเสธสมมติฐานที่ไม่ได้ทำให้มันเป็นจริง กระดาษวิธีการอธิบายสถิติ GAP มันสามารถใช้ได้ออนไลน์ถ้าคุณต้องการตรวจสอบรายละเอียดทางเทคนิคเพิ่มเติม

k2×2k

kK=2


+1 คุณเห็นปัญหาที่อาจเกิดขึ้นจากการอ่านพล็อตอย่างดีทำได้ดีมาก! ลิงค์ไปยังกระดาษของ Hastie ยินดีให้การสนับสนุนคำตอบของคุณเช่นกัน
whuber

@whuber: เรามีการสนทนาเกี่ยวกับตาชั่งใช่มั้ย :)
usεr11852พูดว่า Reinstate Monic

มันเป็นบริบทที่แตกต่างฉันไม่ได้ทำการเชื่อมต่อ ...
whuber

มันเป็นบริบทที่แตกต่างแน่นอน ฉันพูดถึงคุณเพียงเพราะมันเป็น "ตาชั่ง" ที่นั่นและ "ตาชั่ง" ที่นี่
usεr11852พูดว่า Reinstate Monic

0

ฉันมีปัญหาเช่นเดียวกับโปสเตอร์ต้นฉบับ ปัจจุบันเอกสาร R บอกว่าการตั้งค่าดั้งเดิมและค่าเริ่มต้นของ d.power = 1 ไม่ถูกต้องและควรแทนที่ด้วย d.power: "ค่าเริ่มต้น, d.power = 1 สอดคล้องกับการดำเนินการ" R "ในขณะที่ d.power = 2 สอดคล้องกับสิ่งที่ Tibshirani และคณะเสนอให้ซึ่งพบโดย Juan Gonzalez ในปี 2016-02 "

ดังนั้นการเปลี่ยน d.power = 2 จึงช่วยแก้ปัญหาให้ฉันได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.