我正在使用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')
答案 0 :(得分:2)
问题是k-means在这些数据上不稳定。
每次运行10次,并绘制所有结果。
K-means对异常值和高维数据敏感。所以它只是在文本上不可靠。
答案 1 :(得分:0)
您如何使用k-means定义不同主题之间的距离?
如果你只是使用单词的相似性作为k-means的距离度量,你就不会得到主题,你会得到某种单词计数器。
我使用Latent Dirichlet Allocation(LDA)进行主题建模,有一些易于使用的Python,R,Java库..