假设我的文本数据如下所示,以列表的形式。
l = ['have approved 13 request its showing queue note data been sync move out these request from queue', 'note have approved 12 requests its showing queue note data been sync move out all request from queue', 'have approved 2 request its showing queue note data been sync move out of these 2 request ch 30420 cr 13861']
我正在使用TFIDFVectorizer和DBSCAN Clustering对此文本进行聚类并为其提供标签。
vect = TfidfVectorizer(ngram_range=(3,4), min_df = 1, max_df = 1.0, decode_error = "ignore")
tfidf = vect.fit_transform(l)
a = (tfidf * tfidf.T).A
db_a = DBSCAN(eps=0.3, min_samples=5).fit(a)
lab = db_a.labels_
print lab
我得到输出为
`array([-1, -1, -1])`
所以基本上DBSCAN将我的所有数据标记为'-1',这将其归类为sklearn DBSCAN文档中提到的噪声。
答案 0 :(得分:3)
如果您只有3个项目,但需要minPts
个项目密集,那么根据定义,您的所有数据都是噪音:它们的{{{{{ 1}}半径。
如果您想要基于密度的群集,请使用更多更多数据... (我不建议将minPts降低到5以下;通常应该选择更大的minPts来产生有意义的结果。如果你减少minPts太多,你就会得到单链接聚类及其所有缺点。)
另请注意,您需要以捕获类似文档的方式选择eps
。即您认为非常相似的文档的距离应低于epsilon,而您认为不相似的对象的距离必须大于epsilon。
答案 1 :(得分:0)
虽然 Erich Schubert 的回答是最全面的,但我想补充一点,您也可以设置:
minPts = 1
防止产生任何噪音,因为如果每个点附近没有任何邻居,它就会变成一个簇。但是,如上所述,这将产生不太有意义的结果。