การเลือกกลุ่มสำหรับ k-mean: กรณีที่ 1 คลัสเตอร์


9

ไม่มีใครรู้วิธีที่ดีในการพิจารณาว่าการจัดกลุ่มโดยใช้ kmeans เหมาะสมหรือไม่ นั่นคือสิ่งที่ถ้าตัวอย่างของคุณเป็นเนื้อเดียวกันจริง ๆ ? ฉันรู้ว่าแบบจำลองการผสม (ผ่าน mclust ใน R) จะให้ข้อมูลสถิติที่เหมาะสมสำหรับกรณีคลัสเตอร์ 1: k แต่ดูเหมือนว่าเทคนิคทั้งหมดในการประเมิน kmeans ต้องการอย่างน้อย 2 กลุ่ม

ไม่มีใครรู้เทคนิคในการเปรียบเทียบเคส 1 และ 2 กลุ่มสำหรับ kmeans

คำตอบ:


10

สถิติช่องว่างเป็นวิธีที่ดีในการทำเช่นนี้ Tibshirani, Hastie & Walther (2001)

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - แพ็คเกจ R ที่เกี่ยวข้อง

แนวคิดก็คือมันทำการทดสอบสมมติฐานตามลำดับของการจัดกลุ่มข้อมูลของคุณสำหรับ K = 1,2,3, ... เทียบกับสมมติฐานว่างของเสียงแบบสุ่มซึ่งเทียบเท่ากับหนึ่งคลัสเตอร์ จุดแข็งของมันคือมันให้การบ่งชี้ที่น่าเชื่อถือว่า K = 1 คือว่าไม่มีกลุ่มหรือไม่

นี่คือตัวอย่างฉันกำลังตรวจสอบข้อมูลทางดาราศาสตร์เมื่อไม่กี่วันก่อนที่มันเกิดขึ้นนั่นคือจากการสำรวจดาวเคราะห์นอกระบบที่ผ่านการเปลี่ยนสถานะ ฉันต้องการทราบว่ามีหลักฐานอะไรบ้างสำหรับกลุ่ม (นูน) ข้อมูลของฉันคือ 'การขนส่ง'

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

ด้วยสถิติช่องว่างที่คุณกำลังมองหาค่าแรกของ K ที่การทดสอบ 'ล้มเหลว' นั่นคือสถิติของช่องว่างลดลงอย่างมีนัยสำคัญ การวนรอบด้านบนจะพิมพ์ ak ดังกล่าวอย่างไรก็ตามเพียงแค่วางแผน cgap ให้รูปต่อไปนี้:
ป้อนคำอธิบายรูปภาพที่นี่ ดูว่ามีการจุ่มที่สำคัญในช่องว่างจาก k = 1 ถึง k = 2 ซึ่งหมายความว่าไม่มีกลุ่ม (เช่น 1 คลัสเตอร์)


วิธีการทำเช่นเดียวกันสำหรับการจัดกลุ่มแบบลำดับชั้นด้วยการเชื่อมโยงเดียว? คุณช่วยอธิบายอาร์กิวเมนต์ความสนุกของ clusGap ได้ไหม? ฉันวิ่งไปที่บรรทัดด้านล่างสำหรับ kmax แบบลำดับชั้น = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100) แต่มันให้ข้อผิดพลาดที่บอกว่าข้อผิดพลาดใน FUNcluster (X, kk, ... ): วิธีการจัดกลุ่มที่ไม่ถูกต้อง 2
GeorgeOfTheRF

4

คุณอาจลองวิธีการใหม่กว่านี้: A. Kalogeratos และ A.Likas, Dip- Mean : วิธีการจัดกลุ่มแบบส่วนเพิ่มสำหรับการประมาณจำนวนกลุ่ม , NIPS 2012

ความคิดคือการใช้การทดสอบสมมติฐานทางสถิติสำหรับ unimodality บนเวกเตอร์ที่มีความคล้ายคลึงกัน / ระยะห่างระหว่างจุดหนึ่งและจุดที่เหลือของชุด การทดสอบเสร็จสิ้นโดยใช้การทดสอบการจุ่มของ Hartigan-Hartigan , Ann statist 13 (1): 70-84

วิธีการเริ่มต้นด้วยชุดข้อมูลทั้งหมดเป็นหนึ่งคลัสเตอร์และแยกส่วนเพิ่มตราบเท่าที่สมมติฐาน unimodality ถูกปฏิเสธ (เช่นมีมากกว่าหนึ่งกลุ่มมีอยู่)

ดังนั้นวิธีนี้จะระบุว่ามีข้อมูลมากกว่าหนึ่งกลุ่ม (คำถามของคุณ) แต่อาจให้การจัดกลุ่มสุดท้ายด้วย

ที่นี่คุณสามารถค้นหารหัสบางอย่างใน Matlab


0

สมมติว่าฉันกำลังพิจารณาตัวอย่างเดียวกัน

ไลบรารี่ (คลัสเตอร์) cgap <- clusGap (การขนส่ง, ความสนุก = kmeans, K.max = kmax, B = 100) สำหรับ (k ใน 1: (kmax-1)) {if (cgapTa[k,3]>ก.aพีTab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; หยุดพัก; }

ฉันจะเซตย่อยองค์ประกอบของกลุ่มที่สอดคล้องกับโซลูชันการจัดกลุ่มที่ดีที่สุดตามสถิติของช่องว่างสูงสุดได้อย่างไร เพื่อให้ฉันสามารถใช้สำหรับการวิเคราะห์เพิ่มเติมในแต่ละกลุ่ม

ฉันรู้ว่ามีคำสั่งเรียกว่าส่วนย่อย ไม่มีปัญหาในการใช้คำสั่งนี้เมื่อเราได้รับจำนวนของกลุ่มที่เราต้องการ แต่วิธีการเซ็ตย่อยเมื่อเราต้องการเซตย่อยตาม k ที่ดีที่สุดที่ได้รับโดยใช้ช่องว่าง (กล่าวโดยย่อคือองค์ประกอบย่อยของกลุ่มถ้ามีลูป)

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