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 文档中所述。

4

2 回答 2

4

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

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

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

于 2015-01-14T11:59:42.070 回答
0

虽然 Erich Schubert 的回答是最全面的,但我想补充一点,您还可以设置:

minPts = 1

防止产生任何噪音,因为如果附近没有任何邻居,每个点都将成为一个集群。但是,如上所述,这将产生意义不大的结果。

于 2021-05-14T04:05:02.150 回答