假设我的文本数据如下所示,以list的形式出现。
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聚类来聚类这个文本,并给它们一个标签。
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文档中所述。
发布于 2015-01-14 19:59:42
如果您只有3个项目,但需要5个项目的minPts才能变得密集,那么根据定义,您的所有数据都是噪声:它们在其eps半径内没有5个邻居。
如果您想要基于密度的集群,请使用更多的数据...(我不建议将minPts降低到5以下;通常应该选择更大的值才能产生有意义的结果。如果您过多地减少minPts,您只能得到带有所有缺点的单链路集群。)
还需要注意的是,您需要选择能够捕获类似文档的eps。即,您认为非常相似的文档的距离应小于epsilon,而您认为不相似的对象的距离必须大于epsilon。
发布于 2021-05-14 12:05:02
虽然Erich Schubert的答案是最全面的,但我想补充的是,你也可以设置:
minPts = 1
为了防止任何噪声的产生,因为如果每个点附近没有任何邻居,它将成为一个簇。然而,如上所述,这将产生更少的有意义的结果。
https://stackoverflow.com/questions/27942141
复制相似问题