数百列和行上的肘部方法

数据挖掘 Python scikit-学习 k-均值
2022-03-11 06:46:05

因此,我在应用 TF-IDF(词频-逆文档频率)后调用了这些向量matrix_,并将其转换为 dataframe matrixDF_

我想用sklearnmatrix_中的 MiniBatchKMeans 对这些向量进行聚类。但是由于向量很大(569 行和 829 列),所以我需要先找到最佳的 K-Cluster。

这就是我使用Yellowbrick的 KElbowVisualizer 的原因。起初,它工作得很好,我得到了最佳的 k-cluster。但是,当再次重新运行它时,它向我显示了不同数量的 k-cluster。这就是我当时感到困惑的地方。

任何人都可以帮我解决这个问题吗?

这是我的代码:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import MiniBatchKMeans
from scipy.spatial.distance import cdist
from sklearn.metrics import silhouette_score
from yellowbrick.cluster import KElbowVisualizer

""" vectorize the words. getting the tf-idf of each words """
vec = TfidfVectorizer(
     lowercase = True,
     stop_words = 'english',
     use_idf=True
)

matrix_ = vec.fit_transform(df)
matrixDF_ = pd.DataFrame(matrix_.toarray(), columns=vec.get_feature_names())

model = MiniBatchKMeans(MiniBatchKMeans(init_size=559, random_state=None))
visualizer = KElbowVisualizer(model,k=(2, 11), metric='distortion', 
timings=True, size=(1080, 720))
visualizer.fit(matrix_)        # Fit the data to the visualizer
visualizer.show()

我还尝试将数据框适合matrixDF_.可视化工具,但每次运行后的每个输出都有不同的输出编号。

以下是一些输出示例。第一个输出: 在此处输入图像描述

第二个输出: 在此处输入图像描述

1个回答

每次运行 k-means ( ) 时,您都使用不同的随机起点,random_state=None这意味着您每次可能会得到不同的聚类、不同的聚类指标。这是预期的。您可能希望做的是对几次不同运行的结果进行平均,以便更可靠地估计每个 k 的损失。