DBSCAN中的替代相似度度量?
我在用 scikit-learn
这个Python模块测试我的图像集合,使用的是DBSCAN算法。关于计算相似度,还有其他的选择:
# Compute similarities
D = distance.squareform(distance.pdist(X))
S = 1 - (D / np.max(D))
我可以尝试一些加权的测量方法或者类似的东西,有什么例子吗?
3 个回答
0
我认为DBSCAN这个算法需要的是距离,而不是相似度。不过,当涉及到字符串时,它就需要一个相似度矩阵。这个矩阵可以通过一行代码来判断两个字符串是否相等。因此,如何使用这个相似度矩阵,以及如何区分相邻的对象和不相邻的对象,就看你自己的选择了。
0
你可以使用任何你喜欢的相似度矩阵。只要这个矩阵是基于有效的距离就行,比如说它要是对称的,并且是正半定的。
3
有一种叫做“广义DBSCAN”的方法,是对DBSCAN的扩展。
其实在使用DBSCAN的时候,你甚至不需要计算距离。这就是为什么一开始计算相似度矩阵其实没有什么意义。
你只需要一个叫“getNeighbors”的判断条件,它可以找出你认为的邻居对象。
在DBSCAN中,距离其实并没有被真正用到,除了用来判断一个对象是不是邻居。所以你只需要这个简单的判断就可以了。
你可以试试以下的方法:先把矩阵初始化为全1。对于任何两个你认为在你的应用中相似的对象(我们无法提供太多帮助,因为我们不知道你的应用和数据),把对应的单元格填成0。然后用epsilon = 0.5来运行DBSCAN,显然DBSCAN会把所有的0都当作邻居。