Tại sao hầu hết các điểm của tôi được phân loại là nhiễu bằng DBSCAN?


7

Tôi đang sử dụng một số thuật toán phân cụm từ sklearn để phân cụm một số dữ liệu và dường như không thể hiểu được chuyện gì đang xảy ra với DBSCAN. Dữ liệu của tôi là một ma trận thuật ngữ tài liệu từ TfidfVectorizer, với vài trăm tài liệu được xử lý trước.

Mã số:

tfv = TfidfVectorizer(stop_words=STOP_WORDS, tokenizer=StemTokenizer())
data = tfv.fit_transform(dataset)

db = DBSCAN(eps=eps, min_samples=min_samples)
result = db.fit_predict(data)
svd = TruncatedSVD(n_components=2).fit_transform(data)
// Set the colour of noise pts to black
for i in range(0,len(result)):
        if result[i] == -1:
            result[i] = 7
colors = [LABELS[l] for l in result]
pl.scatter(svd[:,0], svd[:,1], c=colors, s=50, linewidths=0.5, alpha=0.7)

Đây là những gì tôi nhận được cho eps = 0,5, min_samples = 5:

Về cơ bản, tôi không thể nhận được bất kỳ cụm nào trừ khi tôi đặt min_samples thành 3, điều này mang lại điều này:

Tôi đã thử kết hợp nhiều giá trị eps / min_samples và nhận được kết quả tương tự. Nó dường như luôn luôn cụm các khu vực mật độ thấp đầu tiên. Tại sao nó lại co cụm như thế này? Tôi có thể sử dụng TruncatedSVD không chính xác?


Chào mừng bạn đến với Xác thực chéo ! Xin vui lòng dành một chút thời gian để xem tour du lịch của chúng tôi .
Tavrock

Các biểu đồ phân tán cho thấy không có xu hướng nhưng có thể là phương sai không phải là hằng số.
Michael R. Chernick

1
@MichaelCécick: Nhận xét này có vẻ không đúng chỗ. Bạn có ý nghĩa gì theo xu hướng và tại sao chúng ta quan tâm đến nó trong ứng dụng phân cụm này? Nếu bất cứ điều gì sự phân tán của hai điểm số PC đầu tiên hiển thị một cụm rõ ràng. DBSCAN không kiểm tra trong phương sai cụm hoặc bất cứ điều gì tương tự ...
usεr11852

2
Lưu ý rằng có lẽ bạn nên sử dụng DBSCAN với khoảng cách cosine hơn là khoảng cách Euclide ở đây.
Có QUIT - Anony-Mousse

Câu trả lời:


5

Biểu đồ phân tán các điểm chiếu SVD của dữ liệu TFIDF ban đầu cho thấy thực sự cần phát hiện một số cấu trúc mật độ. Tuy nhiên, những dữ liệu này không phải là đầu vào DBSCAN được trình bày cùng. Có vẻ như bạn đang sử dụng làm đầu vào dữ liệu TFIDF ban đầu .

Điều rất hợp lý là bộ dữ liệu TFIDF ban đầu rất thưa thớt và có chiều cao. Phát hiện các cụm dựa trên mật độ trong một miền như vậy sẽ rất đòi hỏi. Ước tính mật độ chiều cao là một vấn đề khó đúng ; đó là một kịch bản điển hình trong đó lời nguyền của chiều hướng bắt đầu. Chúng ta chỉ thấy một biểu hiện của vấn đề này ("lời nguyền"); phân cụm kết quả được trả về bởi DBSCAN khá thưa thớt và giả định (có thể sai) rằng dữ liệu trong tay bị đánh đố với các ngoại lệ.

Tôi sẽ đề nghị rằng, ít nhất là tại trường hợp đầu tiên, DBSCAN được cung cấp các điểm chiếu được sử dụng để tạo biểu đồ phân tán được hiển thị làm đầu vào. Cách tiếp cận này sẽ có hiệu quả Phân tích ngữ nghĩa tiềm ẩn (LSA). Trong LSA, chúng tôi sử dụng phân tách SVD của một ma trận chứa số lượng từ của văn bản văn bản được phân tích (hoặc ma trận tài liệu thuật ngữ chuẩn hóa như một ma trận được trả về bởi TFIDF) để điều tra các mối quan hệ giữa các đơn vị văn bản của văn bản trong tay.


Và như @Tavrock nói chào mừng đến với cộng đồng! : D
usεr11852

Có, tôi đã sử dụng dữ liệu TFIDF ban đầu. Các cụm từ DBSCAN có vẻ hợp lý khi thử điều này với cùng một dữ liệu trong R, vì vậy tôi không mong đợi rằng nó sẽ khác nhiều với sklearn. K-mean (với sklearn) cũng hoạt động tốt trên dữ liệu TFIDF. Liệu nó có ý nghĩa rằng nó sẽ hoạt động với những thứ khác, nhưng không phải cho việc triển khai DBSCAN cụ thể này không? Tuy nhiên, cảm ơn về thông tin về LSA - Tôi hoàn toàn không chắc chắn khi sử dụng các giá trị SVD để khớp với các mô hình so với sử dụng dữ liệu TFIDF là hợp lệ.
filaments

Tuyệt vời, tôi rất vui vì tôi có thể giúp đỡ. Nếu bạn tin rằng bài đăng này trả lời câu hỏi của bạn, bạn có thể xem xét chấp nhận câu trả lời.k-means (có lẽ) đã có thể tìm thấy một cụm vì nó không phụ thuộc trực tiếp vào một ϵyếu tố giống như DBSCAN cho bán kính của cụm; điều đó không có nghĩa là việc phân cụm là hợp lý mặc dù. Tôi chưa sử dụng sklearntriển khai Python DBSCAN vì vậy tôi không thể nhận xét về chất lượng của nó. Lưu ý rằng một số triển khai có thể thực hiện các bước xử lý trước mặc định và điều đó có thể vô tình ảnh hưởng đến hiệu suất của chúng khi được áp dụng.
usεr11852
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.