不同轴上不同 epsilon 的聚类算法
Clustering algorithm with different epsilons on different axes
我正在寻找一种聚类算法,例如 s DBSCAN 确实处理 3d 数据,其中可以根据轴设置不同的 epsilons。因此,例如 x-y 平面上的 epsilon 为 10m,z 轴上的 epsilon 为 0.2m。
本质上,我正在寻找大而扁平的星团。
注意:我是一名考古学家,该算法将用于寻找分散在大表面但垂直狭窄层中的物体之间的潜在相关性
在计算 DBSCAN core points. The standard DBSCAN uses the Euclidean distance 以计算 epsilon 内的点时,只需定义自定义距离度量。所以所有维度都被同等对待。
但是,您可以使用 Mahalanobis distance 以不同方式权衡每个维度。您可以对平面簇使用对角协方差矩阵。您可以对平坦倾斜的簇等使用完全对称的协方差矩阵。
在你的例子中,你会使用像这样的协方差矩阵:
100 0 0
0 100 0
0 0 0.04
在 DBSCAN 的维基百科条目提供的伪代码中,只需使用上面在 regionQuery 函数中建议的距离度量之一。
更新
注意:缩放数据等同于使用适当的指标。
解决方案 1:
扩展您的数据集以匹配您想要的 epsilon。
在您的情况下,将 z 缩放 50。
解决方案 2:
使用加权距离函数。
例如WeightedEuclideanDistanceFunction 在 ELKI 中,并相应地选择您的权重,例如-distance.weights 1,1,50
将在第三个轴上放置 50 倍的权重。
这可能是最方便的选择,因为您已经在使用 ELKI。
我正在寻找一种聚类算法,例如 s DBSCAN 确实处理 3d 数据,其中可以根据轴设置不同的 epsilons。因此,例如 x-y 平面上的 epsilon 为 10m,z 轴上的 epsilon 为 0.2m。
本质上,我正在寻找大而扁平的星团。
注意:我是一名考古学家,该算法将用于寻找分散在大表面但垂直狭窄层中的物体之间的潜在相关性
在计算 DBSCAN core points. The standard DBSCAN uses the Euclidean distance 以计算 epsilon 内的点时,只需定义自定义距离度量。所以所有维度都被同等对待。
但是,您可以使用 Mahalanobis distance 以不同方式权衡每个维度。您可以对平面簇使用对角协方差矩阵。您可以对平坦倾斜的簇等使用完全对称的协方差矩阵。
在你的例子中,你会使用像这样的协方差矩阵:
100 0 0
0 100 0
0 0 0.04
在 DBSCAN 的维基百科条目提供的伪代码中,只需使用上面在 regionQuery 函数中建议的距离度量之一。
更新
注意:缩放数据等同于使用适当的指标。
解决方案 1:
扩展您的数据集以匹配您想要的 epsilon。
在您的情况下,将 z 缩放 50。
解决方案 2:
使用加权距离函数。
例如WeightedEuclideanDistanceFunction 在 ELKI 中,并相应地选择您的权重,例如-distance.weights 1,1,50
将在第三个轴上放置 50 倍的权重。
这可能是最方便的选择,因为您已经在使用 ELKI。