1

在 scikit-learn 网站上有一个将 k-means 应用于文本挖掘的示例。感兴趣的摘录如下:

if opts.n_components:
    original_space_centroids = svd.inverse_transform(km.cluster_centers_)
    order_centroids = original_space_centroids.argsort()[:, ::-1]
else:
    order_centroids = km.cluster_centers_.argsort()[:, ::-1]

terms = vectorizer.get_feature_names()
for i in range(true_k):
    print("Cluster %d:" % i, end='')
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind], end='')
    print()

(示例链接

我的第一个问题是关于 km.cluster_centers_。每个术语实际上是一个维度,因此每个术语的集群中心值是每个集群在术语维度中的“位置”。这些值是否已排序,因为每个术语维度中特定术语的较高值代表该术语代表集群的“强度”?如果是这样,请解释为什么会这样。

其次,该算法提供了在聚类之前对术语文档矩阵执行 LSA 的选项。我可以假设这有助于通过维度的正交性来提高每个集群的唯一性吗?或者还有其他的东西吗?在聚类之前执行 SVD 是典型的吗?

提前致谢!

4

1 回答 1

0

让我们从问题一开始吧!每个都km.cluster_centers_代表您的“术语频率空间”中的集群中心。对这些进行(在这种情况下为反向)argsort 会给出这些聚类中心频率最高的词条,因为数字越大表示词条频率越高。做相反的事情也会很有趣,它会显示对你的集群来说频率较低的术语。

tl;dr:对术语进行排序以显示集群中频率最高的术语

现在是第二个问题。LSA 的组件是正交的,但这并不意味着使用 LSA 的数据投影是正交的。LSA 已被用作一种降维技术,因此它基本上消除了术语矩阵中无意义的信息,这意味着集群应该提供更多信息,因为它们不会来自潜在的噪声特征。在聚类之前执行降维实际上取决于您的数据,但总的来说它不会受到伤害,但它会增加任何计算的时间。

tl; dr否,LSA 用于减少维度以改善聚类。

希望有帮助。

于 2016-03-09T19:41:58.687 回答