是否可以通过SciKit-Learn在K均值群集中找到数据点?

问题描述

我有一个数据集,其中包含观鸟者的评论。我使用TF-IDF矢量化器将文本注释转换为矢量特征,然后运行K-means聚类以将我的数据分为多个聚类。我有一组清晰的集群。但是,我一直在尝试寻找一种方法,以找出将哪些词分成哪些类。我知道如何获取功能标签/名称,但是我想查看每个功能下的实际数据点,然后将它们转换回原始单词。我正在使用Python和Scikit-Learn的K-means算法。

def final_k_model(X,finalk):
    final_k_mod = KMeans(n_clusters=finalk,init='random',n_init=10,max_iter=300,tol=1e-04,random_state=0)
    final_k_mod.fit(X)

    # plot the results:
    centroids = final_k_mod.cluster_centers_

    tsne_init = 'pca'
    tsne_perplexity = 20.0
    tsne_early_exaggeration = 4.0
    tsne_learning_rate = 1000
    random_state = 1
    tsnemodel = TSNE(n_components=2,random_state=random_state,init=tsne_init,perplexity=tsne_perplexity,early_exaggeration=tsne_early_exaggeration,learning_rate=tsne_learning_rate)

    transformed_centroids = tsnemodel.fit_transform(centroids)

    plt.figure(1)
    plt.scatter(transformed_centroids[:,0],transformed_centroids[:,1],marker='x')
    plt.savefig('plots\\cluster.png')
    plt.show()

    return final_k_mod

我提供了一些代码,但不确定是否有帮助,因为我没有错误。我只是想弄清楚这是否有可能,我一直在使用Google搜索并查看教程,但没有找到它。

解决方法

假设您通过以下方法计算了代码中的X,

#corpus = list of all documents
#vocab = list of all words in corpus
tdf_idf = TfidfVectorizer(vocabulary=vocab)
X = tdf_idf.fit_transform(corpus)

您正在寻找以下物品吗?

for centroid in centroids:
    score_this_centroid = {}
    for word in tdf_idf.vocabulary_.keys():
        score_this_centroid[word] = centroid[tdf_idf.vocabulary_[word]]
        pass