【问题标题】:K-means clustering on text data without tf-idf preprocessing在没有 tf-idf 预处理的情况下对文本数据进行 K-means 聚类
【发布时间】:2019-04-27 05:05:03
【问题描述】:

我使用 k-means 在没有 TF-IDF 预处理的情况下对文本数据进行聚类,将文本数据转换为数字。 我可以毫无问题地检索 K-means 聚类组,但据我所知,K-means 不是只需要数字数据吗?

有人可以向我解释一下这个场合,K-means是如何计算文本之间的距离的?

数据是一个包含数千行的数据框,下面是其中的一些。 “牛奶果酱面包苹果牛肉苏打水”是我聚类的文本。 “真”表示该项目在第 n 个观察中显示。

Milk    Jam     Bread   Apple   Beef    Soda
False   True    True    False   False   False
True    True    False   False   False   False
False   False   False   False   True    False
False   False   True    True    False   True

我的代码

# assigning index to items
id_compound_dict = dict(zip(df3.index, list(df3)))
[(k, id_compound_dict[k]) for k in list(id_compound_dict.keys())[0:5]] 

# k-means clustering
n_clusters = 2
kmeans_fit = KMeans(n_clusters = n_clusters).fit(df3)

#  Checking clustering groups
group = 0   # no n group
ids = np.where(kmeans_fit.labels_ == group)[0] 
names = [id_compound_dict[i] for i in ids]     
names

【问题讨论】:

  • 文本到底在哪里?只是看起来像布尔值。您可能正在加载 1s 和 0s。
  • @Tomothy32 "Milk Jam Bread Apple Beef Soda" 是我要聚类的文本
  • 等等,Trues 和 Falses 是干什么用的?
  • 您的数据表示称为词袋。这不是文本。
  • @Tomothy32 True 表示该项目在第 n 次观察中显示

标签: python k-means


【解决方案1】:

数据表示

K-Means 需要数值数据而不是字符串,因为它计算点之间的欧几里得距离。

将字符串文档转换为数字表示的可能方法:

  1. 词袋 (BoW)
  2. 词频 (TF)
  3. 词频-逆文档频率 (TF-IDF)
  4. Doc2Vec

这些方法用于一种层次结构,它们 Doc2Vec 执行的信息最多,但计算量最大。 BoW 的计算量更少,但携带的信息更少。

您所拥有的表示是 Bag Of Words。

K 均值距离

经典 K-Means(我假设是您拥有的)使用 欧几里得距离 来收敛质心。 在您的情况下,TrueFalse 将分别被视为 10

K-Means 的其他变体,例如 K-MediansK-Medoids,它们可以使用不同的距离度量。这些可以是曼哈顿距离、余弦距离或任何其他距离。

您还可以做的一件事是将算法中的距离函数更改为允许使用字符串数据的函数。例如,您可以使用 Levenshtein 度量来计算点之间的距离。这样,您可以将数据表示形式保留为 string,而不必担心将其转换为数字表示形式。

如果您对 K-Means 变体或更改算法的距离度量感兴趣,我建议您阅读此learning unit。它解释了 K-Means 的工作原理并帮助您从头开始实施它。

【讨论】:

  • 谢谢。据我了解,词袋就像是词频、TF-IDF 等文本特征提取算法的预处理步骤。虽然 BoW 看起来像“数字”,但其含义实际上是布尔值。 K-means 使用欧几里得距离来计算布尔值之间的距离是没有意义的。这就是为什么我对我仍然收到聚类结果感到困惑的原因!?
  • @Osca 没问题。 boolean 值被视为 numerical01。如果您认为 欧几里得距离 不是要走的路,您可以改变它。看看我的答案中的链接,你可以看到如何。顺便说一句,如果您觉得您的问题已得到解答,请随时接受此答案。
猜你喜欢
  • 2015-06-22
  • 2018-01-25
  • 2017-10-07
  • 2023-04-02
  • 2019-05-28
  • 2016-04-04
  • 2017-11-20
  • 2021-05-14
  • 2016-08-14
相关资源
最近更新 更多