首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python和Sklearn中消除文本数据DBSCAN聚类中的噪声?

如何在Python和Sklearn中消除文本数据DBSCAN聚类中的噪声?
EN

Stack Overflow用户
提问于 2015-01-14 19:42:30
回答 2查看 3.9K关注 0票数 1

假设我的文本数据如下所示,以list的形式出现。

代码语言:javascript
复制
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聚类来聚类这个文本,并给它们一个标签。

代码语言:javascript
复制
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

我得到的输出是

代码语言:javascript
复制
  `array([-1, -1, -1])`

因此,基本上DBSCAN将我的所有数据标记为'-1‘,这是将其归类为噪声,如sklearn DBSCAN文档中所述。

EN

回答 2

Stack Overflow用户

发布于 2015-01-14 19:59:42

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

如果您想要基于密度的集群,请使用更多的数据...(我不建议将minPts降低到5以下;通常应该选择更大的值才能产生有意义的结果。如果您过多地减少minPts,您只能得到带有所有缺点的单链路集群。)

还需要注意的是,您需要选择能够捕获类似文档的eps。即,您认为非常相似的文档的距离应小于epsilon,而您认为不相似的对象的距离必须大于epsilon。

票数 4
EN

Stack Overflow用户

发布于 2021-05-14 12:05:02

虽然Erich Schubert的答案是最全面的,但我想补充的是,你也可以设置:

minPts = 1

为了防止任何噪声的产生,因为如果每个点附近没有任何邻居,它将成为一个簇。然而,如上所述,这将产生更少的有意义的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27942141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档