1

我正在使用 Elki LngLatDistanceFunction 对 Lon/lat 点进行聚类,但它只返回一个聚类(当我使用欧几里德距离时返回更多聚类)。我尝试了多个 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);
4

1 回答 1

2

距离以米为单位。因此,您需要选择 epsilon,以使某些(但不是所有)点的邻居数超过 minPts。

您可以使用KNNDistancesSampler该类来估计参数。这不是自动估计。但是您可以绘制结果距离,并在该图中检查“膝盖”。

注意“噪音”标志。

  • 如果你得到一个单一的集群,它是“噪音”,那么 epsilon 太小了。
  • 如果你得到一个单一的集群,它是一个“集群”(不是噪音),那么 epsilon 太大了。
  • 如果你得到一个单一的集群,并且它是“噪音”,那么 minPts 可能太大了。
  • 如果你得到一个集群,并且它是一个集群,那么 minPts 可能太小了。

对于大多数应用程序,将 minPts 固定为 4、10 或 20 会更容易;然后根据需要调整 epsilon 参数。对于像您这样的地理应用程序,修复 epsilon 参数并改变 minpts 参数可能更容易。例如,您可能知道小于 10000 米的距离表示对象是“邻居”。

OPTICS 等算法也有助于直观地选择参数。(使用 MiniGUI!)

于 2015-11-02T08:31:05.113 回答