Phân cụm với sự tương tự cosin


8

Tôi có một bộ dữ liệu lớn và sự tương đồng cosin giữa chúng. Tôi muốn phân cụm chúng bằng cách sử dụng độ tương tự cosine để đặt các đối tượng tương tự lại với nhau mà không cần chỉ định trước số lượng cụm mà tôi mong đợi.

Tôi đọc tài liệu sklearn của DBSCAN và Tuyên truyền mối quan hệ, trong đó cả hai đều yêu cầu ma trận khoảng cách (không phải ma trận tương tự cosine).

Thực sự, tôi chỉ tìm kiếm bất kỳ thuật toán nào không yêu cầu a) số liệu khoảng cách và b) số cụm được chỉ định trước .

Có ai biết một thuật toán sẽ làm điều đó?

Câu trả lời:


8

Đầu tiên, mọi thuật toán phân cụm đang sử dụng một số loại số liệu khoảng cách. Điều này thực sự quan trọng, bởi vì mỗi số liệu có các thuộc tính riêng và phù hợp với các loại vấn đề khác nhau.

Bạn nói rằng bạn có sự tương đồng cosin giữa các hồ sơ của bạn, vì vậy đây thực sự là một ma trận khoảng cách. Bạn có thể sử dụng ma trận này làm đầu vào cho một số thuật toán phân cụm.

Bây giờ, tôi khuyên bạn nên bắt đầu với phân cụm theo phân cấp - nó không yêu cầu số lượng cụm được xác định và bạn có thể nhập dữ liệu và chọn khoảng cách hoặc nhập ma trận khoảng cách (trong đó bạn đã tính khoảng cách theo cách nào đó).

Lưu ý rằng phân cụm phân cấp rất tốn kém để tính toán, vì vậy nếu bạn có nhiều dữ liệu, bạn có thể bắt đầu chỉ bằng mẫu.


Cảm ơn câu trả lời hữu ích. Tôi có một vấn đề tương tự như datascience.stackexchange.com/questions/20198 này và muốn sử dụng câu trả lời được đưa ra trong đó. Tuy nhiên, để tìm ra những điểm gần nhất với tâm, anh ta sử dụng khoảng cách cosin tối thiểu. Nếu tôi đang sử dụng độ tương tự cosine, nó có phải là độ tương tự cosine cao nhất không?
Smith Volka

1
Bạn chỉ có thể chuyển đổi khoảng cách thành tương tự. Nếu khoảng cách từ A đến B là 0,3 thì độ tương tự sẽ là 1-0.3 = 0.7.
HonzaB

3

DBSCAN có thể được thực hiện một cách tầm thường với một thước đo tương tự thay vì khoảng cách. Bạn chỉ cần thay đổi <= epsilon thành a> = epsilon.

HAC cũng hoạt động tốt với các điểm tương đồng (ít nhất là liên kết đơn, liên kết hoàn chỉnh, UPGMA, WPGMA - không sử dụng Ward), nếu bạn trao đổi "tối thiểu" và "tối đa" (bạn muốn hợp nhất với độ tương tự tối đa thay vì tối thiểu khoảng cách).

Nếu bạn lười biếng, bạn cũng có thể biến đổi sự giống nhau của mình thành một khoảng cách. Nếu bạn có một mức tối đa cố định, dist = max-sim sẽ thường làm.


Cảm ơn bạn đã trả lời. ypu có nghĩa là gì bởi epsilon trong <= epsilon thành a> = epsilon?
Smith Volka

Ok, giá trị mặc định của eps trong sklearn là 0,5. Có đúng không nếu tôi tăng giá trị này (ví dụ: 0,8). Có phải đó là những gì bạn có ý nghĩa trong câu trả lời của bạn?
Smith Volka

DBSCAN sử dụng ngưỡng khoảng cách epsilon tối đa. Thay vào đó, bằng GDBSCAN, bạn cũng có thể sử dụng mức độ tương tự tối thiểu. bạn cần thay đổi mã, không phải tham số . Sklearn không hỗ trợ sự tương đồng. ELKI có hỗ trợ trực tiếp cho các chức năng tương tự trong GDBSCAN thông qua SimilarityNeighborPredicate.
Có QUIT - Anony-Mousse

Nếu bạn không thể viết mã, bạn có thể thực hiện phương pháp "lười biếng" mà tôi đã đề cập. Nó sẽ cho kết quả tương tự.
Có QUIT - Anony-Mousse

Ý bạn là gì nếu bạn có một mức tối đa cố định, dist = max-sim thường sẽ làm gì? Tôi quan tâm đến việc thử nó.
Smith Volka

3

Tôi muốn sử dụng phân cụm phân cấp của sklearn

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from scipy.cluster import  hierarchy

#Vectorizing
X = CountVectorizer().fit_transform(docs)
X = TfidfTransformer().fit_transform(X)
#Clustering
X = X.todense()
threshold = 0.1
Z = hierarchy.linkage(X,"average", metric="cosine")
C = hierarchy.fcluster(Z, threshold, criterion="distance")

Clà cụm tài liệu của bạn docs.

Bạn có thể sử dụng các số liệu khác thay vì cosinevà sử dụng ngưỡng khác với0.1


là "tài liệu" ma trận dữ liệu gốc? Nơi để đặt ma trận dữ liệu, hoặc nơi để đặt ma trận tương tự cosine? cảm ơn
Bill Ancalagon màu đen

1
docslà các tài liệu, Zlà ma trận tương tự cosin
Uri Goren

3

Tôi nghĩ rằng gói clustMixType có thể cung cấp cho bạn kết quả / thông tin chi tiết tốt hơn.

Bằng cách sử dụng gói này, bạn có thể sử dụng kết hợp trực tiếp Dữ liệu phân loại và dữ liệu số, nó không cần bất kỳ loại mã hóa nóng nào.

Bạn chỉ cần cung cấp dữ liệu và nó sẽ tự động phân tách thành Dữ liệu phân loại và dữ liệu số, nếu bạn tìm thấy bất kỳ vấn đề nào tại thời điểm tách biệt, bạn có thể sử dụng các hàm như as.factor(to convert to a categorical)as.numeric(to convert to a Numeric field).

Bạn có thể tính toán Lambda(mean Distance value)trước khi sử dụng và đưa vào làm đầu vào cho thuật toán.

Nếu bạn không biết số lượng cụm tối ưu, bạn có thể sử dụng WSS(within Sum of Squares), plot(elbow chart)để quyết định số lượng cụm tối ưu.


2

Tất cả các phương pháp phân cụm sử dụng một số liệu khoảng cách của một số loại. Và hãy nhớ rằng khoảng cách về cơ bản là một thước đo khác nhau. Vì vậy, nếu bạn bình thường hóa sự giống nhau của mình, hãy chia sẻ 0 và 1, khoảng cách của bạn chỉ đơn giản là tương tự 1

Đối với các thuật toán không yêu cầu một số cụm được chỉ định, tất nhiên có các kỹ thuật phân cụm theo cấp bậc, về cơ bản xây dựng một cấu trúc giống như cây mà bạn có thể "cắt" bất cứ nơi nào bạn muốn (bạn có thể sử dụng một số số liệu về độ hoàn hảo để thực hiện điều đó một cách tự động )

X-mean là phiên bản của K-nghĩa là thử một số lượng K nhất định và chọn một phương thức tối đa hóa một số chức năng đánh giá.

Sự dịch chuyển trung bình cũng "tìm thấy" một số cụm tự nhiên nhưng có thể cảm nhận được với các tham số khác, chẳng hạn như băng thông.

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.