簡體   English   中英

DBSCAN sklearn非常慢

[英]DBSCAN sklearn is very slow

我正在嘗試對具有超過一百萬個數據點的數據集進行聚類。 一列具有文本,另一列具有與之對應的數值。 我面臨的問題是它卡住了並且永遠無法完成。 我曾嘗試使用約100,000個較小的數據集,並且運行速度相當快,但是隨着我開始增加數據點,它開始變慢,一百萬個它從未完成並掛起。 最初,我認為這可能是因為我有一個用於文本的tfidf矩陣,並且有100個尺寸,所以要花很長時間。 然后,我嘗試基於數量(僅是每個數據點的單個值)進行聚類,但仍未完成。 下面是代碼片段。 知道我做錯了什么嗎? 我見過人們在使用更大的數據集並且沒有問題。

Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree')
dbscan.fit_predict(Y)
labels = dbscan.labels_
print(labels.size)
clusters = labels.tolist()
#printing the value and its label
for a, b in zip(labels, Y):
    print(a, b)

使用更多核心。

使用n_jobs參數。 DBSCANn_jobs=-1其定義為: n_jobs=-1

例:

Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree', n_jobs=-1)
dbscan.fit_predict(Y)
labels = dbscan.labels_
print(labels.size)
clusters = labels.tolist()
#printing the value and its label
for a, b in zip(labels, Y):
    print(a, b)

您的epsilon太大了。

如果大多數點在大多數其他點的epsilon內,則運行時間將是二次O(n²)。 因此, 從小的價值開始!

您不能只是添加/刪除功能並保留epsilon不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM