Точная настройка параметров hdbscan для кластеризации текстовых документов
У меня есть текстовые документы, которые группируются с использованием hdbsca. Когда у меня есть данные о количестве лазера около 35 документов и правильные значения кластеров около 14, то, используя следующие параметры, я получаю правильный результат.
def cluster_texts(textdict, eps=0.40,min_samples = 1):
"""
cluster the given texts
Input:
textdict: dictionary with {docid: text}
Returns:
doccats: dictionary with {docid: cluster_id}
"""
doc_ids = list(textdict.keys())
# transform texts into length normalized kpca features
ft = FeatureTransform(norm='max', weight=True, renorm='length', norm_num=False)
docfeats = ft.texts2features(textdict)
X, featurenames = features2mat(docfeats, doc_ids)
e_lkpca = KernelPCA(n_components=12, kernel='linear')
X = e_lkpca.fit_transform(X)
xnorm = np.linalg.norm(X, axis=1)
X = X/xnorm.reshape(X.shape[0], 1)
# compute cosine similarity
D = 1 - linear_kernel(X)
# and cluster with dbscan
clst = hdbscan.HDBSCAN(eps=eps, metric='precomputed', min_samples=min_samples,gen_min_span_tree=True,min_cluster_size=2)
y_pred = clst.fit_predict(D)
return {did: y_pred[i] for i, did in enumerate(doc_ids)}
Теперь я просто скопировал данные, каждый документ по 100 раз. И попытался настроить кластеризацию, но теперь я получаю 36 кластеров, каждый документ в отдельном кластере. Я пытался изменить разные параметры. но никаких изменений в результате кластеризации.
Любое предложение или ссылка высоко ценится.
1 ответ
Очевидно, что если вы реплицируете каждую точку 100 раз, вам нужно увеличить параметр minPts в 100 раз и минимальный размер кластера.
Но вашей главной проблемой, скорее всего, является KernelPCA, чувствительный к количеству сэмплов, а не HDBSCAN.