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?