【问题标题】:Why Python's scikit-learn K-Means text clustering algorithm always provides different retult为什么 Python 的 scikit-learn K-Means 文本聚类算法总是提供不同的结果
【发布时间】:2021-07-06 23:04:41
【问题描述】:

我有一个文档列表和要在该列表上执行操作的此类。所以,基本上,morphed_documents 是一个字符串列表。最后,算法返回每个文档的集群。但是为什么结果和模型的标签不一样呢?

class Vectorizer:

    def __init__(self):
        self.vectorizer = TfidfVectorizer()

    def fit_transform(self, morphed_documents):
        matrix = self.vectorizer.fit_transform(morphed_documents)
        return matrix

    def fit(self, number_of_clusters, matrix):
        model = KMeans(n_clusters=number_of_clusters, init='k-means++', max_iter=100, n_init=100)
        model.fit(matrix)
        return model

    def print_terms(self, model, number_of_clusters):
        order_centroids = model.cluster_centers_.argsort()[:, ::-1]
        terms = self.vectorizer.get_feature_names()

        for i in range(number_of_clusters):
            print("Cluster %d:" % i),
            for ind in order_centroids[i, :100]:
                print(' %s' % terms[ind])

【问题讨论】:

  • 您需要传递random_state 以使其具有确定性(请参阅documentation

标签: python scikit-learn


【解决方案1】:

K-Means 算法从簇质心的随机初始化开始。每次运行KMeans 时,此选择都会有所不同,并且可能会产生不同的结果。为了获得可重现的结果,您可以在KMeans 中使用random_state 参数,这将修复簇中心点的初始选择:

model = KMeans(n_clusters=number_of_clusters, 
               init='k-means++', 
               max_iter=100, 
               n_init=100, 
               random_state=123)

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 2020-12-23
    • 2021-01-19
    • 2020-09-19
    • 2016-08-14
    • 2020-09-07
    • 2014-09-20
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多