2011-06-29 51 views
23

Sử dụng phương thức plot(hclust(dist(x))), tôi có thể vẽ bản đồ cây cụm. Nó hoạt động. Tuy nhiên, tôi muốn có được một danh sách của tất cả các cụm, không phải là một sơ đồ cây, bởi vì tôi có số lượng lớn dữ liệu (như 150K nút) và cốt truyện bị lộn xộn.Danh sách nhóm cho chức năng hclust

Nói cách khác, cho phép nói nếu a b c là một cụm và nếu d e f g là một cụm sau đó tôi muốn có được một cái gì đó như thế này:

1 a,b,c 
2 d,e,f,g 

Xin lưu ý rằng đây không phải là chính xác những gì tôi muốn nhận được như một "đầu ra". Nó chỉ là một ví dụ. Tôi chỉ muốn có thể có được một danh sách các cụm thay vì một lô cây Nó có thể là các vector, ma trận hoặc các số đơn giản chỉ ra các phần tử nhóm nào thuộc về.

Làm cách nào có thể?

+0

Điều này có thể hữu ích. http://stackoverflow.com/questions/28378113/match-and-add-the-cluster-number-to-the-original-data/28384937#28384937 – EskimoT

Trả lời

34

Tôi sẽ sử dụng tập dữ liệu có sẵn trong R để minh họa cách cắt một cây thành số phần mong muốn. Kết quả là một bảng.

Tạo đối tượng hclust.

hc <- hclust(dist(USArrests), "ave") 
#plot(hc) 

Bây giờ bạn có thể cắt cây thành nhiều nhánh tùy thích. Đối với mẹo tiếp theo của tôi, tôi sẽ chia cây thành hai nhóm. Bạn đặt số lần cắt với tham số k. Xem ?cutree và việc sử dụng thông số h có thể hữu ích hơn cho bạn (xem cutree(hc, k = 2) == cutree(hc, h = 110)).

cutree(hc, k = 2) 
     Alabama   Alaska  Arizona  Arkansas  California 
      1    1    1    2    1 
     Colorado Connecticut  Delaware  Florida  Georgia 
      2    2    1    1    2 
     Hawaii   Idaho  Illinois  Indiana   Iowa 
      2    2    1    2    2 
     Kansas  Kentucky  Louisiana   Maine  Maryland 
      2    2    1    2    1 
Massachusetts  Michigan  Minnesota Mississippi  Missouri 
      2    1    2    1    2 
     Montana  Nebraska   Nevada New Hampshire  New Jersey 
      2    2    1    2    2 
    New Mexico  New York North Carolina North Dakota   Ohio 
      1    1    1    2    2 
     Oklahoma   Oregon Pennsylvania Rhode Island South Carolina 
      2    2    2    2    1 
    South Dakota  Tennessee   Texas   Utah  Vermont 
      2    2    2    2    2 
     Virginia  Washington West Virginia  Wisconsin  Wyoming 
      2    2    2    2    2 
+0

tuyệt vời! cảm ơn bạn. Điều này làm cho tôi nghĩ làm thế nào người ta có thể có thể ước tính một giá trị tốt cho tham số "k" để số lượng các cụm trong dữ liệu là những gì nó nên được thay vì những gì tôi muốn nó được? Nói cách khác, nếu tôi không biết tôi cần phải cắt bao nhiêu lần vì tôi không biết có bao nhiêu cụm trong dữ liệu. Đó thực sự là những gì tôi đang cố gắng tìm hiểu đó là nói số lượng cụm và các phần tử trong mỗi cụm. Xin lỗi nếu tôi không rõ ràng trước đó. – dave

+0

@dave, bạn có thể biết chiều cao nào bạn muốn cắt cây không? Nếu có, sử dụng tham số 'h' (xem'? Cutree'). Hàm sẽ trả về số nhóm thích hợp (và lòng trung thành của lá). –

+1

Tôi thấy, có lẽ đây là những gì tôi có thể làm, các đối tượng hclust có các thành phần như ma trận kết hợp, chiều cao vv cho phép nói nếu a là một đối tượng hclust, chúng ta có thể truy cập chiều cao có thể bằng cách sử dụng $ height.So có thể chọn chiều cao tối đa từ ma trận đó, tôi có thể tìm ra số lượng các cụm có thể. Đó là những gì tôi có thể tìm thấy thông qua việc đọc của tôi. – dave

11

cho phép nói,

y<-dist(x) 
clust<-hclust(y) 
groups<-cutree(clust, k=3) 
x<-cbind(x,groups) 

bây giờ bạn sẽ nhận được cho mỗi hồ sơ, nhóm cluster. Bạn cũng có thể đặt tập dữ liệu:

x1<- subset(x, groups==1) 
x2<- subset(x, groups==2) 
x3<- subset(x, groups==3) 
Các vấn đề liên quan