Làm thế nào để bạn kiểm tra việc thực hiện k-nghĩa?


11

Tuyên bố miễn trừ trách nhiệm: Tôi đã đăng câu hỏi này lên Stackoverflow, nhưng tôi nghĩ có lẽ điều này phù hợp hơn với nền tảng này.

Làm thế nào để bạn kiểm tra việc thực hiện k-mean của riêng bạn cho các tập dữ liệu đa chiều?

Tôi đã nghĩ đến việc chạy một triển khai đã có sẵn (tức là Matlab) trên dữ liệu và so sánh kết quả với thuật toán của tôi. Nhưng điều này sẽ đòi hỏi cả hai thuật toán để hoạt động nhiều hơn gần giống nhau và ánh xạ giữa hai kết quả có lẽ không phải là một miếng bánh.

Bạn có ý kiển nào tốt hơn không?

Câu trả lời:


10

Các phương tiện k bao gồm một thành phần ngẫu nhiên, do đó rất có thể bạn sẽ không nhận được kết quả tương tự trừ khi bạn có cùng một cách thực hiện và sử dụng cùng một cấu hình bắt đầu. Tuy nhiên, bạn có thể xem kết quả của mình có phù hợp với các triển khai nổi tiếng không (không biết về Matlab, nhưng việc triển khai thuật toán k-mean trong R được giải thích rõ, xem Hartigan & Wong, 1979 ).

Đối với việc so sánh hai loạt kết quả, vẫn có vấn đề với việc chuyển nhãn nếu nó được chạy nhiều lần. Một lần nữa, trong gói e1071 R, có một hàm rất tiện dụng (; matchClasses()) có thể được sử dụng để tìm ánh xạ 'tốt nhất' giữa hai loại trong bảng phân loại hai chiều. Về cơ bản, ý tưởng là sắp xếp lại các hàng sao cho tối đa hóa thỏa thuận của chúng với các cột hoặc sử dụng cách tiếp cận tham lam và hoán vị các hàng và cột cho đến khi tổng của đường chéo (thỏa thuận thô) là tối đa. Hệ số thỏa thuận như thống kê Kappa cũng được cung cấp.

Cuối cùng, về cách đánh giá mức độ thực hiện của bạn, có rất nhiều dữ liệu có sẵn miễn phí hoặc bạn có thể mô phỏng một bộ dữ liệu chuyên dụng (ví dụ: thông qua mô hình hỗn hợp hữu hạn, xem gói MixSim ).


chào chi, cảm ơn câu trả lời. Khi bạn muốn, bạn cũng có thể trả lời câu hỏi giống hệt nhau tại SO và tôi cũng sẽ chấp nhận nó ở đó. => stackoverflow.com/questions/4280371/
Mạnh

(+1) Đoạn đầu tiên nhanh chóng đi vào trọng tâm của vấn đề.
whuber

6

kkbảng phân loại cho các cặp nhãn: nếu kết quả đồng ý, nó sẽ là bội số của ma trận hoán vị. Nghĩa là, mỗi hàng và mỗi cột phải có chính xác một ô khác. Đó là một kiểm tra đơn giản để lập trình. Cũng rất đơn giản để theo dõi những sai lệch nhỏ từ lý tưởng này trở lại các điểm dữ liệu riêng lẻ để bạn có thể thấy chính xác hai câu trả lời khác nhau như thế nào nếu chúng khác nhau. Tôi sẽ không bận tâm để tính toán các biện pháp thỏa thuận thống kê: có thỏa thuận hoàn hảo (cho phép hoán vị) hoặc không có, và trong trường hợp sau, bạn cần theo dõi tất cả các điểm bất đồng để hiểu cách chúng xảy ra. Các kết quả hoặc đồng ý hoặc họ không; bất kỳ số lượng bất đồng nào, thậm chí tại một thời điểm, cần kiểm tra.

Bạn có thể muốn sử dụng một số loại bộ dữ liệu để thử nghiệm: (1) bộ dữ liệu được xuất bản với kết quả k-mean được công bố; (2) bộ dữ liệu tổng hợp với các cụm mạnh rõ ràng; (3) bộ dữ liệu tổng hợp không có phân cụm rõ ràng. (1) là một môn học tốt để sử dụng bất cứ khi nào bạn viết bất kỳ chương trình toán học hoặc thống kê nào. (2) dễ dàng thực hiện theo nhiều cách, chẳng hạn như bằng cách tạo một số điểm ngẫu nhiên để đóng vai trò là trung tâm của cụm và sau đó tạo ra các đám mây điểm bằng cách thay thế ngẫu nhiên các trung tâm cụm tương đối nhỏ. (3) cung cấp một số kiểm tra ngẫu nhiên có khả năng phát hiện ra các hành vi bất ngờ; một lần nữa, đó là một kỷ luật kiểm tra chung tốt.

ivvi0,1,2,,n1nknk

d2uv2dxzxz

w=z(zx)x.

ywxyxydncos(2πk/n)x+sin(2πk/n)yk0n1


(+1) Nhận xét của bạn về các cách có thể để tạo dữ liệu tổng hợp có liên quan rất đáng hoan nghênh.
chl

2

Một cách tiếp cận 'ngây thơ' rất đơn giản sẽ là sử dụng dữ liệu tổng hợp đơn giản, vì mọi việc thực hiện sẽ dẫn đến cùng một cụm.

Ví dụ trong Python với import numpy as np:

test_data = np.zeros((40000, 4))
test_data[0:10000, :] = 30.0
test_data[10000:20000, :] = 60.0
test_data[20000:30000, :] = 90.0
test_data[30000:, :] = 120.0

Đối với n_clusters = 4nó sẽ cung cấp cho bạn một hoán vị của[30, 60, 90, 120]


0

Vì k-mean chứa các quyết định được chọn ngẫu nhiên (chỉ phần khởi tạo), tôi nghĩ cách tốt nhất để thử thuật toán của bạn là chọn các điểm ban đầu và để chúng cố định trong thuật toán của bạn trước rồi chọn mã nguồn khác của thuật toán và sửa các điểm theo cùng một cách. Sau đó, bạn có thể so sánh cho kết quả thực tế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.