DBSCAN:在Python中聚集大量字符串

时间:2018-05-01 12:44:22

标签: string cluster-analysis dbscan

我试图根据字符串相似性将包含40.000行字符串数据的列聚类为x个聚类。我发现了DBSCAN适当的算法,因为我不知道预期的簇数或要比较的单词。 Levenshtein最适合作为基于字符串相似性的聚类的距离度量。代码如下。

运行算法时出现内存错误:我的RAM爆炸了。可扩展性似乎是dbscan的问题。在10个字符串上运行dbscan对于我的笔记本电脑来说已经存在问题,在7 + / 8 GB RAM上运行此计算。有人建议将Ball_Tree指数作为解决方案;在下面的代码中你可以看到我试过,但同样的内存问题。

我在不同的posts中看到了类似的问题。我可以找到dbscan的变体,即NG-DBSCANdbscan-multiplex,但我无法找到实现这些方法的方法。另一个提议的解决方案是在Java中使用ELKI,但我希望能够使用Python来实现解决方案。

我需要帮助找到内存问题的解决方法,这样我就可以运行dbscan算法并在我的数据文件中聚集40k字符串。

这是我写的代码:

df4 = df1[['Omschrijving2']].copy()
data = df4.values

def lev_metric(x, y):
    i, j = int(x[0]), int(y[0])     # extract indices
    return pylev.levenshtein(data[i], data[j])

X = np.arange(len(data)).reshape(-1, 1)

dbscan(X, eps=2, min_samples=50, metric=lev_metric, metric_params=None, 
algorithm="auto", leaf_size=100, sample_weight=None, n_jobs=1)

或BallTree dbscan:

eps=2
tree = BallTree(X, leaf_size=30, metric=lev_metric)
tree.query_radius(X, r=eps)

0 个答案:

没有答案