大佬教程收集整理的这篇文章主要介绍了DBSCAN 聚类与名称不同 (Python),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 TF-IDF 和 DBSCAN 在数据库中聚类相似的人名。该项目的目标是能够将属于同一个人但格式或拼写不一定相同的名称聚集在一起。例如,John Smith 也可以在数据库中标记为 J. Smith 或 Smith,John。理想情况下,该模型能够将这些实例聚集在一起。
我使用的数据集有超过 25 万条记录。我了解 DBSCAN 会将噪声记录标记为 -1
。然而,该模型还产生了一个额外的集群,其中几乎总是有大约 20 万条记录,其中的绝大多数记录似乎应该在自己的单独集群中。是否有可能发生这种情况的原因?我正在考虑在这个大型集群上运行另一个模型,看看会发生什么。
任何建议将不胜感激。谢谢!
首先,当您拥有的集群数量未知时,DBSCAN 是一种合理的监督聚类方法。
您需要为要聚类的每个字符串传递距离矩阵。您使用什么 String similarity metric 是您的选择。以下是 Levenstein 距离的示例,其中 names
是用于聚类的字符串列表或数组:
import Levenshtein as Lev
import numpy as np
from sklearn.cluster import DBSCAN
lev_similarity = 1 * np.array([[Lev.distance(v1,v2) for v1 in names] for v2 in names])
dbscan = DBSCAN(eps=5,min_samples=1)
dbscan.fit(lev_similarity)
因为我们使用 lev 距离,eps 将是将一个字符串转换为另一个字符串的替换次数。根据您的用例调整它。最大的问题是缩短了较长的名称('malala yousafzai'
与 'malala y.'
相比,'jane doe'
到 'jane d.'
的替换次数更多)
关于为什么您当前的代码将大部分数据集聚集在一起的假设:您的 eps
值调得太高了。
您将其称为“DBSCAN”,我知道您在说什么,因为我现在正在工作,但您的描述听起来更像是模糊匹配。查看下面的链接,看看这是否有助于您完成最终游戏。
https://medium.com/analytics-vidhya/matching-messy-pandas-columns-with-fuzzywuzzy-4adda6c7994f
此外,下面是 DBSCAN 规范示例的链接,但同样,我认为这不是您真正想要做的。
https://toWARDsdatascience.com/dbscan-clustering-for-data-shapes-k-means-cant-handle-well-in-python-6be89af4e6ea
以上是大佬教程为你收集整理的DBSCAN 聚类与名称不同 (Python)全部内容,希望文章能够帮你解决DBSCAN 聚类与名称不同 (Python)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。