我使用DBSCAN对文本文档进行聚类,感谢这个帖子的启发。
db = DBSCAN(eps=0.3, min_samples=2).fit(X)core_samples_mask1 = np.zeros_like(db1.labels_, dtype=bool)core_samples_mask1[db1.core_sample_indices_] = Truelabels1 = db1.labels_
现在我想知道哪些文档属于哪个聚类,例如:
[我有一辆车,它是蓝色的] 属于 cluster0
或者
idx [112] 属于 cluster0
我之前在这里问过类似的问题,但我已经测试了那里提供的一些答案,例如:
X[labels == 1,:]
我得到了:
array([[0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0]], dtype=int64)
但这对我没有帮助。如果你有任何建议或方法,请告诉我。
回答:
如果你有一个包含idx
和messages
列的pandas数据框df
,你只需要做以下操作:
df['cluster'] = db.labels_
即可获得一个包含聚类成员的新列cluster
。
这里有一个使用虚拟数据的简短演示:
import numpy as npimport pandas as pdfrom sklearn.cluster import DBSCANX = np.array([[1, 2], [5, 8], [2, 3], [8, 7], [8, 8], [2, 2]])db = DBSCAN(eps=3, min_samples=2).fit(X)db.labels_# array([0, 1, 0, 1, 1, 0], dtype=int64)# 将我们的numpy数组转换为pandas数据框:df = pd.DataFrame({'Column1':X[:,0],'Column2':X[:,1]})print(df)# 结果: Column1 Column20 1 21 5 82 2 33 8 74 8 85 2 2# 添加一个新的列,显示所属的聚类:df['cluster'] = db.labels_print(df)# 结果: Column1 Column2 cluster0 1 2 01 5 8 12 2 3 03 8 7 14 8 8 15 2 2 0