我正在使用 sklearn 中的几种聚类算法来聚类一些数据,但似乎无法弄清楚 DBSCAN 发生了什么。我的数据是来自 TfidfVectorizer 的文档术语矩阵,包含数百个预处理文档。
代码:
tfv = TfidfVectorizer(stop_words=STOP_WORDS, tokenizer=StemTokenizer())
data = tfv.fit_transform(dataset)
db = DBSCAN(eps=eps, min_samples=min_samples)
result = db.fit_predict(data)
svd = TruncatedSVD(n_components=2).fit_transform(data)
// Set the colour of noise pts to black
for i in range(0,len(result)):
if result[i] == -1:
result[i] = 7
colors = [LABELS[l] for l in result]
pl.scatter(svd[:,0], svd[:,1], c=colors, s=50, linewidths=0.5, alpha=0.7)
这是 eps=0.5, min_samples=5 得到的结果:
基本上,除非我将 min_samples 设置为 3,否则我根本无法获得任何集群,这给出了:
我尝试了 eps/min_samples 值的各种组合并得到了类似的结果。它似乎总是首先聚集低密度区域。为什么会这样聚集?我可能错误地使用了 TruncatedSVD 吗?