词汇集合中的模式和分组

我需要找出5000个样本中多个词汇之间的相关性如何。

样本如下:

  1. 芒果,番石榴,荔枝,苹果
  2. 芒果,番石榴,荔枝,橙子
  3. 芒果,番石榴,菠萝,葡萄
  4. 钢笔,铅笔,书,复印本,笔记本
  5. 钢笔,铅笔,书,复印本,尺子

我们可以看到,第1和第2项非常接近。第3项与第1和第2项也非常接近。第4和第5项也非常接近。

我们可以使用什么方法和技术来检查这种相关性?

提前感谢!

修订:还需要帮助进行分组,例如A组包含第1、2、3行,B组包含第4和第5行?


回答:

这里有一种解决这个问题的办法。我使用scikit-learn将每个列表转换为文档-词矩阵。然后使用scipy.spacial.distance计算各行之间的余弦相似性矩阵。

from sklearn.feature_extraction.text import CountVectorizerfrom scipy.spatial import distancecount_vect = CountVectorizer(tokenizer=lambda x: x.split(', '))ls = ['mango, guava, litchi, apple',       'mango, guava, litchi, orange',      'mango, guava, pineapple, grape',      'pen, pencil, book, copy, notebook',      'pen, pencil, book, copy, scale']X = count_vect.fit_transform(ls).toarray()D = distance.cdist(X, X, metric='cosine')

输出是各行之间的距离矩阵,看起来如下:

[[ 0.  ,  0.25,  0.5 ,  1.  ,  1.  ], [ 0.25,  0.  ,  0.5 ,  1.  ,  1.  ], [ 0.5 ,  0.5 ,  0.  ,  1.  ,  1.  ], [ 1.  ,  1.  ,  1.  ,  0.  ,  0.2 ], [ 1.  ,  1.  ,  1.  ,  0.2 ,  0.  ]])

例如,D[0, 1]表示第1行与第2行接近,因为两行之间的距离较小。您还可以看到,D[3, 4]较小,这意味着第4行与第5行接近。

注意您也可以考虑使用distance.pdist(X, metric='cosine'),它只给出矩阵的下三角,因为下三角和上三角是相等的。

文档分组

为了更高级,您可以使用层次聚类将各行与计算出的距离矩阵聚类在一起。

from scipy.cluster import hierarchyD = distance.pdist(X, metric='cosine')Z = hierarchy.linkage(D, metric='euclidean')partition = hcluster.fcluster(Z, t=0.8, criterion='distance') # [2, 2, 2, 1, 1] 

这意味着文档1、2、3被分组到第2组中,4、5被分组到第1组中。如果您绘制树状图,您可以看到各行是如何聚类在一起的

from scipy.cluster.hierarchy import dendrogramimport matplotlib.pyplot as plthierarchy.dendrogram(Z, above_threshold_color='#bcbddc',                     orientation='top')

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注