我正在尝试对一个极其稀疏的文本语料库进行聚类,并且我知道聚类的数量(我的数据是科学出版物的标题和作者列表,我已经知道类别的数量)。
我的语料库中的每个条目都有 5 到 20 个特征;整个语料库有 80000 个样本和 5000-120000 个特征(我可以过滤掉一些很少出现的特征,或者那些非常频繁出现的特征)。如您所见,数据非常稀疏。
我试图通过创建数据的 TF-IDF 矩阵并在其上运行k均值来识别集群。该算法完全失败,即它将超过 99% 的数据放在同一个集群中。我在这两个步骤中都使用 Python scikit-learn。这是一些示例代码(关于实际工作的数据),以防它对某人有所帮助:
from sklearn.cluster import KMeans
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
data = ['aa ab','aa ab','ac a_b','ac a_b','bc ba', 'bc ba', 'ba bc']
vectorized = vectorizer.fit_transform(data)
km = KMeans(n_clusters=3, init='random', n_init=1, verbose=1)
km.fit(vectorized)
print km.labels_
[1 1 0 0 2 2 2]
我的问题是:对于这个问题,有没有更好的替代 TF-IDF 的方法,然后是k方法?开始在我的 TF-IDF 数据上寻找不同的距离度量(例如余弦相似度)是否有意义,或者我是否会因为缺乏数据而失败?谢谢!