K-Means主题建模 - 弯头法

时间:2018-04-30 18:52:39

标签: python machine-learning scikit-learn cluster-analysis k-means

我正在使用K-Means从文本中提取主题。我知道这不是最好的方法,但这只是迈向更复杂模型的一步。令我困惑的是我得到的肘部曲线(下图)。你会怎么解释它?为什么50 K左右突然飙升?或者在处理文本时,弯头方法不起作用?

from sklearn.cluster import MiniBatchKMeans

wcse = []
for k in range(5, 100, 5):
    kmeans_model = MiniBatchKMeans(n_clusters=num_clusters, init='k-means++', n_init=1, 
                         init_size=1000, batch_size=1000, verbose=False, max_iter=1000)
    kmeans = kmeans_model.fit(X) # where X is my data
    wcse.append(kmeans_.inertia_)

#plot it
fig = plt.figure(figsize=(15, 5))
plt.plot(range(5, 100, 5), wcse)
plt.grid(True)
plt.title('Elbow curve')

enter image description here

2 个答案:

答案 0 :(得分:2)

问题是k-means在这些数据上不稳定。

每次运行10次,并绘制所有结果。

K-means对异常值和高维数据敏感。所以它只是在文本上不可靠。

答案 1 :(得分:0)

您如何使用k-means定义不同主题之间的距离?

如果你只是使用单词的相似性作为k-means的距离度量,你就不会得到主题,你会得到某种单词计数器。

我使用Latent Dirichlet Allocation(LDA)进行主题建模,有一些易于使用的Python,R,Java库..