运行 轨迹上的 DBSCAN
Run DBSCAN on trajectories
我正在尝试对轨迹数据集进行 运行 DBSCAN (sklearn.cluster)。数据集是数组(轨迹)的数组(点)
dataset_test =
array([[[46.37017059, 30.954216 ],
[46.39661026, 30.94524956],
[46.46545792, 30.94379807],
[46.47494888, 30.94352913],
[46.53890991, 30.94241714],
[46.54576111, 30.95412064]],
[[46.3741684 , 30.96355057],
[46.40998077, 30.94839096],
[46.43452072, 30.94845963],
[46.47270966, 30.94708061],
[46.48934174, 30.94626999],
[46.5067749 , 30.94859695]],
[[46.02920151, 31.13430023],
[46.08929825, 31.13030052],
[46.21580124, 31.04080009],
[46.3125 , 30.96290016],
[46.40140152, 30.95050049],
[46.47000122, 30.94930077]],
...,
[[44.21621323, 36.12607193],
[44.35692596, 37.2990303 ],
[44.42433167, 37.44826889],
[44.47311783, 37.58980179],
[44.50473022, 37.72211075],
[44.52869034, 37.83360672]],
[[41.54032898, 31.87997246],
[41.60663986, 31.83249092],
[41.63148117, 31.81200027],
[41.67761993, 31.77362061],
[41.69719315, 31.75731087],
[41.7834549 , 31.68216133]],
[[46.3062439 , 30.72232246],
[46.298069 , 30.74869919],
[46.28075409, 30.79483032],
[46.2546196 , 30.86957932],
[46.24847794, 30.96400261],
[46.25270081, 30.97114944]]])
我定义了一个距离函数。
当运行宁
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=3, min_samples=2, metric=hsdf_distance).fit(dataset_test)
我收到错误:
ValueError: Found array with dim 3. Estimator expected <= 2
有什么想法吗?
您可能遇到了 sklearn 的限制 API。
但是,由于对自定义距离度量使用 "pyfunc" 方法无论如何都非常慢 - 而且不可扩展 - 您可能只能 使用距离矩阵 。无论如何,您不会从索引中获益太多。然后生成 NxN 距离矩阵并使用 distance="precomputed"
.
通常会更快
或者,您可以使用 ELKI 等工具,它不会对输入数据施加任何此类限制 - 它不需要是数字或数组。
特别是,当您还不知道要使用的 epsilon 和 minpts 的值时,使用 Marie 的预计算距离会很有用,因为您可以多次重复使用它。
距离矩阵的明显缺点是 O(n²) 运行时间和内存要求,对于索引友好的数据集,通常可以减少这些要求。
我正在尝试对轨迹数据集进行 运行 DBSCAN (sklearn.cluster)。数据集是数组(轨迹)的数组(点)
dataset_test =
array([[[46.37017059, 30.954216 ],
[46.39661026, 30.94524956],
[46.46545792, 30.94379807],
[46.47494888, 30.94352913],
[46.53890991, 30.94241714],
[46.54576111, 30.95412064]],
[[46.3741684 , 30.96355057],
[46.40998077, 30.94839096],
[46.43452072, 30.94845963],
[46.47270966, 30.94708061],
[46.48934174, 30.94626999],
[46.5067749 , 30.94859695]],
[[46.02920151, 31.13430023],
[46.08929825, 31.13030052],
[46.21580124, 31.04080009],
[46.3125 , 30.96290016],
[46.40140152, 30.95050049],
[46.47000122, 30.94930077]],
...,
[[44.21621323, 36.12607193],
[44.35692596, 37.2990303 ],
[44.42433167, 37.44826889],
[44.47311783, 37.58980179],
[44.50473022, 37.72211075],
[44.52869034, 37.83360672]],
[[41.54032898, 31.87997246],
[41.60663986, 31.83249092],
[41.63148117, 31.81200027],
[41.67761993, 31.77362061],
[41.69719315, 31.75731087],
[41.7834549 , 31.68216133]],
[[46.3062439 , 30.72232246],
[46.298069 , 30.74869919],
[46.28075409, 30.79483032],
[46.2546196 , 30.86957932],
[46.24847794, 30.96400261],
[46.25270081, 30.97114944]]])
我定义了一个距离函数。 当运行宁
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=3, min_samples=2, metric=hsdf_distance).fit(dataset_test)
我收到错误:
ValueError: Found array with dim 3. Estimator expected <= 2
有什么想法吗?
您可能遇到了 sklearn 的限制 API。
但是,由于对自定义距离度量使用 "pyfunc" 方法无论如何都非常慢 - 而且不可扩展 - 您可能只能 使用距离矩阵 。无论如何,您不会从索引中获益太多。然后生成 NxN 距离矩阵并使用 distance="precomputed"
.
或者,您可以使用 ELKI 等工具,它不会对输入数据施加任何此类限制 - 它不需要是数字或数组。
特别是,当您还不知道要使用的 epsilon 和 minpts 的值时,使用 Marie 的预计算距离会很有用,因为您可以多次重复使用它。
距离矩阵的明显缺点是 O(n²) 运行时间和内存要求,对于索引友好的数据集,通常可以减少这些要求。