通过 Python 对具有相似描述的列进行聚类
Posted
技术标签:
【中文标题】通过 Python 对具有相似描述的列进行聚类【英文标题】:Clustering a Column with Similar Descriptions via Python 【发布时间】:2018-02-15 11:34:36 【问题描述】:我的数据集中有一列包含车祸描述。许多描述不一致,但意思相同。例如,如果我考虑标记为Descriptions
的变量的前 7 行(我的实际数据集是 17,000+ 行):
Descriptions
CLMT REAR ENDED IV
claimant REAR ENDED IV
CLM'R EAR ENDED IV
4 way stop sgn
CLM'T rear-ended IV
IV STOPPED AT RED LIGHT WAS REAR ENDED BY CLM'T
IV Stopped at red light when IV was R/E by OV
其中CLMT REAR ENDED IV
和claimant REAR ENDED IV
表示相同的意思,但它们的拼写略有不同。我想生成一个变量,将它们分组到同一类别中。最终目标是这样的:
Descriptions clusterGroup
CLMT REAR ENDED IV cluster1
claimant REAR ENDED IV cluster1
CLM'R EAR ENDED IV cluster1
4 way stop sgn cluster2
CLM'T rear-ended IV cluster1
IV STOPPED AT RED LIGHT WAS REAR ENDED BY CLM'T cluster3
IV Stopped at red light when IV was R/E by OV cluster3
我知道这是错误的,我不知道如何让每一行成为一个 nltk 句子,然后使用 scikit 学习 kmean 进行聚类:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import pandas as pd
import nltk
df = pd.read_csv('dataset.csv')
documents = df['Descriptions'].apply(nltk.sent_tokenize)
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)
true_k = 50
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)
predict=model.predict(X)
df['clusterGroup'] = Series(predict, index=X.index)
当我运行上面的脚本时,出现以下错误:
AttributeError: 'list' object has no attribute 'lower'
考虑到Descriptions
pandas 列中的每一行都是一个句子,我怎么可能使用 nltk 将它们分解成可以运行 kmeans 或其他聚类算法的句子?任何帮助或指导将不胜感激
【问题讨论】:
您可以按照本教程进行操作:nlpforhackers.io/recipe-text-clustering 您是否只想按相似性对描述进行聚类,而不考虑主题,或者您是否拥有(或可以制作)应分配描述的特定类别列表?如果是第二个,请查看分类器。 我的最终目标是产生类似于他们在github.com/smilli/clust 中所做的事情,但理想情况下为每个集群添加标签。我并不是真的想把更多的东西分类成组 执行此任务的简单方法是使用 OpenRefine github.com/OpenRefine/OpenRefine/wiki/Clustering 【参考方案1】:像 k-means 这样的无监督方法在这项任务上总是表现不佳。
因为这完全是关于理解语言,而这不会仅仅从这一小段数据中发生。您可以通过语言的统计分析来完成令人印象深刻的事情(请参阅 Google 助理),但您需要数十亿个文档来训练。即便如此,它也可能涉及大量带标签的训练数据。
【讨论】:
感谢您的回复,有什么建议吗?我想保留这个变量,我认为它可以让我们深入了解我们的数据集 我没有任何建议,因为我认为这无法完全自动化。【参考方案2】:您可以参考以下链接之一:
roup-thousands-of-similar-spreadsheet-text-cells-in-seconds
clustering-product-names-with-python
【讨论】:
以上是关于通过 Python 对具有相似描述的列进行聚类的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中对包含 TRUE/FALSE 值的数据集执行聚类?
Python - 使用 K-means 进行聚类。一些方差为零的列