k-nghĩa là thực hiện với ma trận khoảng cách tùy chỉnh trong đầu vào


14

Bất cứ ai cũng có thể chỉ cho tôi một triển khai k-mean (sẽ tốt hơn nếu trong matlab) có thể lấy ma trận khoảng cách trong đầu vào? Việc thực hiện MATLAB tiêu chuẩn cần ma trận quan sát trong đầu vào và không thể tùy chỉnh thay đổi số đo tương tự.


2
Bạn có thể thử tạo dữ liệu thô tương ứng với ma trận khoảng cách euclide của bạn và nhập dữ liệu đó vào K-Means. Cách tiếp cận dễ dàng khác có thể là sử dụng phương pháp Ward của phân cụm phân cấp của ma trận: K-Means và Ward chia sẻ ý thức hệ tương tự về cụm là gì.
ttnphns


Không phải Matlab, nhưng trang của python theo is-it-could-to-spec-your-own-distance-function-used-scikits-learn-k-mean có thể sử dụng bất kỳ số liệu 20 lẻ nào trong scipy.spatial. khoảng cách.
chối

Câu trả lời:


13

Vì k-mean cần có khả năng tìm phương tiện của các tập hợp con khác nhau của các điểm bạn muốn phân cụm, nên thực sự không có ý nghĩa gì khi yêu cầu một phiên bản của k-mean lấy ma trận khoảng cách làm đầu vào.

Bạn có thể thử k-medoid thay thế. Có một số triển khai MATLAB có sẵn.


1
Xin chào, cảm ơn trả lời của bạn; thay vì trực tiếp đưa ra ma trận khoảng cách, liệu có thể đưa ra làm đầu vào một thước đo khoảng cách tùy chỉnh không? Vấn đề là tôi phải so sánh hai phương pháp phân cụm và vì trong phương pháp thứ hai tôi sử dụng ma trận tương tự tùy chỉnh, tôi muốn sử dụng cùng một phương pháp với kmeans để có được sự so sánh công bằng.
Eugenio

2
ELKI cho phép bạn sử dụng các hàm khoảng cách tùy ý với phương tiện k. Lưu ý rằng thuật toán có thể không hội tụ. K-mean thực sự được thiết kế cho khoảng cách euclide bình phương (tổng bình phương). Với các khoảng cách khác, giá trị trung bình có thể không còn tối ưu hóa nữa và bùng nổ, thuật toán cuối cùng sẽ không hội tụ. Nghiêm túc, xem xét sử dụng k-medoid. Nó thực sự được viết để cho phép sử dụng ý tưởng k- mean với khoảng cách tùy ý.
Có QUIT - Anony-Mousse

Ngoài ra còn có một thư viện python / C ++ cho phép bạn cung cấp một hàm số liệu tùy chỉnh: github.com/annoviko/pyclustering/issues/417
CpILL

7

Bạn có thể biến ma trận khoảng cách của mình thành dữ liệu thô và nhập chúng vào phân cụm K-Means. Các bước sẽ như sau:

1) Khoảng cách giữa các điểm N của bạn phải là bình phương euclide. Thực hiện "định tâm kép " của ma trận: Hàng trừ có nghĩa là từ mỗi phần tử; trong kết quả, cột trừ có nghĩa là từ mỗi phần tử; trong kết quả, thêm trung bình ma trận cho mỗi phần tử; chia cho âm 2. Ma trận bạn có bây giờ là ma trận SSCP (tổng bình phương và sản phẩm chéo) giữa các điểm của bạn trong đó điểm gốc được đặt ở tâm hình học của đám mây N điểm. (Đọc giải thích về định tâm kép ở đây .)

2) Thực hiện PCA (phân tích thành phần chính) trên ma trận đó và thu được ma trận tải thành phần NxN . Một số cột cuối cùng của nó có thể là 0, vì vậy hãy cắt chúng đi. Những gì bạn ở lại bây giờ thực sự là điểm thành phần chính, tọa độ điểm N của bạn trên các thành phần chính đi qua, như các trục, xuyên qua đám mây của bạn. Dữ liệu này có thể được coi là dữ liệu thô phù hợp với đầu vào K-Means.

PS Nếu khoảng cách của bạn không phải là các euclide bình phương chính xác về mặt hình học, bạn có thể gặp phải vấn đề: ma trận SSCP có thể không dương (bán) xác định. Vấn đề này có thể được đối phó theo nhiều cách nhưng mất độ chính xác.


Cảm ơn câu trả lời của bạn! Trên thực tế tôi không có ma trận khoảng cách thực nhưng ma trận tương tự (0 ... 1) giữa các đối tượng và các điểm tương đồng không được tính toán chính xác bằng khoảng cách eidianidian nhưng với thuật toán tùy chỉnh có tính đến dữ liệu thô nhưng không có trong dữ liệu thô cách chuẩn. Tôi đoán trong trường hợp này tôi không thể áp dụng thủ tục của bạn, phải không?
Eugenio

Bạn vẫn có thể, sau khi chuyển đổi điểm tương đồng thành khoảng cách. Loại thứ hai có thể sẽ không phải là euclid thực sự (và do đó SSCP sẽ có một số giá trị riêng âm); sau đó cố gắng thêm hằng số nhỏ vào khoảng cách cho đến khi SSCP mất âm. eig. Cũng có những cách khác tồn tại để giải quyết vấn đề. Và hãy nhớ rằng bạn nhân đôi ma trận trung tâm của khoảng cách bình phương .
ttnphns

PS và nhân tiện. Nếu ma trận của bạn là tương đồng, thì, tốt hơn nữa. Bạn chỉ coi nó như ma trận SSCP mà tôi đã nói và làm PCA với nó. Tuy nhiên, vấn đề về giá trị bản địa âm có thể vẫn còn.
ttnphns

@ttnphns, xin lỗi tôi thiếu phần giải thích của bạn cho bước 1. Ma trận khoảng cách X(giả sử N * N) sẽ đối xứng, vì vậy colMeans(X) =rowMeans(X) và một khi bạn trừ đi hàng hoặc col có nghĩa là : Y=X-rowMeans(X), mean(Y)là 0.
Zhubarb

1
@Zhubarb, khi tôi nói You could turn your matrix of distances into raw data(điểm 1 và 2), về cơ bản, tôi đề cập đến tỷ lệ đa chiều (MDS) của Torgerson , trong đó định tâm kép là bước đầu tiên. Vui lòng tìm kiếm trang web này (và cả Google) về quy trình đó. "Định tâm kép" là việc chuyển đổi khoảng cách (bình phương) thành ma trận sản phẩm vô hướng tương ứng được xác định trên điểm gốc đặt vào tâm của đám mây của các điểm.
ttnphns

3

Xin vui lòng xem bài viết này, được viết bởi một trong những người quen của tôi;)

http://arxiv.org/abs/1304.6899

Đó là về việc triển khai k-mean tổng quát, lấy ma trận khoảng cách tùy ý làm đầu vào. Nó có thể là bất kỳ ma trận không âm đối xứng nào với đường chéo bằng không. Lưu ý rằng nó có thể không cho kết quả hợp lý cho ma trận khoảng cách kỳ lạ. Chương trình được viết bằng C #.

Mã nguồn có thể được lấy bằng cách truy cập liên kết trên, sau đó nhấp vào Định dạng khác, sau đó nhấp vào Tải xuống nguồn. Sau đó, bạn sẽ nhận được một .tar.gz có chứa Program.cs. Ngoài ra, mã nguồn cũng có thể được sao chép từ PDF.


3

Bạn có thể sử dụng Thư viện máy học Java. Họ có một triển khai K-Means. Một trong các hàm tạo chấp nhận ba đối số

  1. Giá trị K.
  2. Một đối tượng của điều đó là một ví dụ của Khoảng cách Lớp .
  3. Số lần lặp lại.

Người ta có thể dễ dàng mở rộng lớp Khoảng cách để đạt được kết quả mong muốn. Ý tưởng là trả về các giá trị từ một ma trận khoảng cách tùy chỉnh trong phương thức đo (Instance x, Instance y) của lớp này.

K-Means được giới thiệu để hội tụ giả định các thuộc tính nhất định của số liệu khoảng cách. Khoảng cách Euclide, khoảng cách Manhattan hoặc các số liệu tiêu chuẩn khác đáp ứng các giả định này. Do số liệu khoảng cách tùy chỉnh có thể không thỏa mãn các giả định này, nên hàm tạo có tham số thứ ba chỉ định số lần lặp để chạy để xây dựng trình phân cụm.

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.