ELKI DBSCAN LngLatDistanceFunction 生成一个集群
ELKI DBSCAN LngLatDistanceFunction producing one cluster
我正在使用 Elki LngLatDistanceFunction 对 Lon/lat 点进行聚类,但它只返回一个聚类(当我使用 Euclid 距离时返回更多聚类)。我尝试了多个 Epsilon 值,但我仍然得到一个集群。
int minPts=20;
double eps=10;
ListParameterization params = new ListParameterization();
params.addParameter(DBSCAN.DISTANCE_FUNCTION_ID, LngLatDistanceFunction.class);
params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, minPts);
params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, eps);
params.addParameter(AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dbcon);
params.addParameter(AbstractDatabase.Parameterizer.INDEX_ID, RStarTreeFactory.class);
params.addParameter(RStarTreeFactory.Parameterizer.BULK_SPLIT_ID, SortTileRecursiveBulkSplit.class);
params.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 600);
Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, params);
db.initialize();
GeneralizedDBSCAN dbscan = ClassGenericsUtil.parameterizeOrAbort(GeneralizedDBSCAN.class, params);
距离以米为单位。因此,您需要选择 epsilon,使某些点(但不是所有点)的邻居数超过 minPts。
您可以使用KNNDistancesSampler
class 来估计参数。它不是自动估计。但是您可以绘制结果距离,并检查此图中的 "knee"。
注意 "noise" 标志。
- 如果你得到一个单一的簇,并且它是 "noise",那么 epsilon 太小了。
- 如果你得到一个单一的集群,它是一个 "cluster"(不是噪声),那么 epsilon 太大了。
- 如果你得到一个单一的集群,并且它是"noise",那么minPts可能太大了。
- 如果你得到的是单个簇,而且是一个簇,那么minPts可能太小了。
对于大多数应用来说,将minPts固定为4、10、20会更容易;然后根据需要调整 epsilon 参数。对于像您这样的地理应用程序,修复 epsilon 参数并改变 minpts 参数可能更容易。例如,您可能 知道 小于 10000 米的距离表明物体是 "neighbors".
OPTICS等算法也有助于直观地选择参数。 (使用 MiniGUI!)
我正在使用 Elki LngLatDistanceFunction 对 Lon/lat 点进行聚类,但它只返回一个聚类(当我使用 Euclid 距离时返回更多聚类)。我尝试了多个 Epsilon 值,但我仍然得到一个集群。
int minPts=20;
double eps=10;
ListParameterization params = new ListParameterization();
params.addParameter(DBSCAN.DISTANCE_FUNCTION_ID, LngLatDistanceFunction.class);
params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, minPts);
params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, eps);
params.addParameter(AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dbcon);
params.addParameter(AbstractDatabase.Parameterizer.INDEX_ID, RStarTreeFactory.class);
params.addParameter(RStarTreeFactory.Parameterizer.BULK_SPLIT_ID, SortTileRecursiveBulkSplit.class);
params.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 600);
Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, params);
db.initialize();
GeneralizedDBSCAN dbscan = ClassGenericsUtil.parameterizeOrAbort(GeneralizedDBSCAN.class, params);
距离以米为单位。因此,您需要选择 epsilon,使某些点(但不是所有点)的邻居数超过 minPts。
您可以使用KNNDistancesSampler
class 来估计参数。它不是自动估计。但是您可以绘制结果距离,并检查此图中的 "knee"。
注意 "noise" 标志。
- 如果你得到一个单一的簇,并且它是 "noise",那么 epsilon 太小了。
- 如果你得到一个单一的集群,它是一个 "cluster"(不是噪声),那么 epsilon 太大了。
- 如果你得到一个单一的集群,并且它是"noise",那么minPts可能太大了。
- 如果你得到的是单个簇,而且是一个簇,那么minPts可能太小了。
对于大多数应用来说,将minPts固定为4、10、20会更容易;然后根据需要调整 epsilon 参数。对于像您这样的地理应用程序,修复 epsilon 参数并改变 minpts 参数可能更容易。例如,您可能 知道 小于 10000 米的距离表明物体是 "neighbors".
OPTICS等算法也有助于直观地选择参数。 (使用 MiniGUI!)