如何在Python和Sklearn中删除文本数据的DBSCAN集群中的噪声?

问题描述 投票:0回答:1

假设我的文本数据如下所示,以列表的形式。

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文档中提到的噪声。

python scikit-learn dbscan
1个回答
3
投票

如果您只有3个项目,但需要5个项目的minPts变得密集,那么根据定义,您的所有数据都是噪声:它们在eps半径内没有5个邻居。

如果你想要基于密度的集群,可以使用更多的数据...(我不建议将minPts减少到5以下;通常应该选择更大的minPts以产生有意义的结果。如果你减少minPts太多,你只需要获得所有的单链路聚类它的缺点。)

另请注意,您需要以捕获类似文档的方式选择eps。即您认为非常相似的文档应该具有低于epsilon的距离,并且您认为不相似的对象必须具有大于epsilon的距离。

© www.soinside.com 2019 - 2024. All rights reserved.