哪个sklearn库中的无监督聚类算法可以用于自定义距离



我有一个函数,它将两个样本作为输入并返回它们的距离,并且从这个函数中我定义了一个度量

def TwoPointsDistance(x1, x2):
    cord1 = f.rf.apply(x1)
    cord2 = f.rf.apply(x2)
    return 1 - (cord1==cord2).sum()/f.n_trees
metric = sk.neighbors.DistanceMetric.get_metric('pyfunc',
                                                     func=TwoPointsDistance)

现在我想根据这个度量来聚类我的数据。我想看看一些使用这个作为距离度量的无监督聚类算法的例子。

编辑:我对这个算法特别感兴趣:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html sklearn.cluster.DBSCAN

编辑:我试过了

DBSCAN(metric=metric, algorithm='brute').fit(Xor)

但是我收到一个错误:

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/dist-packages/sklearn/cluster/dbscan_.py", line 249, in fit
    clust = dbscan(X, **self.get_params())
  File "/usr/local/lib/python3.4/dist-packages/sklearn/cluster/dbscan_.py", line 100, in dbscan
    metric=metric, p=p)
  File "/usr/local/lib/python3.4/dist-packages/sklearn/neighbors/unsupervised.py", line 83, in __init__
    leaf_size=leaf_size, metric=metric, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/sklearn/neighbors/base.py", line 127, in _init_params
    % (metric, algorithm))
ValueError: Metric '<sklearn.neighbors.dist_metrics.PyFuncDistance object at 0x7ff5c299f358>' not valid for algorithm 'brute'
>>> 

我试图找出为什么这个错误出现…我首先认为sklearn.neighbors.NearestNeighbors(这是DBSCAN所基于的)将被限制在sklearn.neighbors.base.VALID_METRICS["brute"]中列出的那些距离。但从源代码判断,任何callable函数应该是好的-所以似乎你的距离是不可调用的?

Please try this:

DBSCAN(metric=TwoPointsDistance, algorithm='brute').fit(Xor)

。没有包裹你的距离作为neighbors.DistanceMetric。在我看来,现在允许在这里使用这些似乎有点不一致……

我自己,我使用ELKI与自定义距离函数取得了巨大的成功,有一个关于如何编写这些可用的简短教程:http://elki.dbs.ifi.lmu.de/wiki/Tutorial/DistanceFunctions

多年后的今天,我在不同的环境中仍然被这个问题绊倒。解决方法很简单:直接将函数作为度量传递。

BSCAN(metric=TwoPointsDistance, algorithm='brute').fit(Xor)

相关内容

  • 没有找到相关文章

最新更新