Gps Weka DBSILON可以基于地理数据设置ε

Gps Weka DBSILON可以基于地理数据设置ε,gps,cluster-analysis,weka,dbscan,Gps,Cluster Analysis,Weka,Dbscan,我有一组格式为的地理数据: 46.52100798 6.567126449 gps 46.52368591 6.59208188 gps 46.52338534 6.593065244 gps 46.52303304 6.594046262 gps 我想进行DBSCAN聚类,并设置与实际距离相同的epsilon参数,如5米: 目前代码如下: public static float distFrom(double lat1, double lng1, double lat2, doub

我有一组格式为的地理数据:

46.52100798 6.567126449  gps
46.52368591 6.59208188   gps
46.52338534 6.593065244  gps
46.52303304 6.594046262  gps
我想进行DBSCAN聚类,并设置与实际距离相同的epsilon参数,如5米: 目前代码如下:

public static float distFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 6371000; //meters
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                    Math.sin(dLng/2) * Math.sin(dLng/2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    float dist = (float) (earthRadius * c);
    return dist;
}
//一种计算给定两对地理数据距离的方法

    cl  = new DBSCAN();
    double [] timeArray = new double[data.numInstances()-1];

    for (int i = 1; i<data.numInstances();i++){
        timeArray[i-1] =(data.instance(i).value(0)-data.instance(i-1).value(0));
    }
    Arrays.sort(timeArray);
    int point =(int)(30*60/timeArray[data.numInstances()/2]);
    System.out.println(point);
    cl.setMinPoints(point);
    cl.setEpsilon(0.01);
    cl.buildClusterer(newData);
//设置DBSCAN实例的参数
有人知道如何将上述距离计算代码插入DBSCAN实例吗

ELKI已经包含了这个距离函数,latlngdistance函数注意纬度和经度的顺序很重要;这就是我们根据您的列顺序提供这两个选项的原因

-algorithm.distancefunction geo.LatLngDistanceFunction
使用此距离功能的距离将以米为单位。通过参数-geo.model,您还可以在不同的地球近似值之间切换,例如简单球形模型或WGS84球体。对于DBSCAN来说,这没有太大的区别,因为您无论如何都希望使用一个小ε,比如您建议的5米

ELKI还包括此距离函数的索引功能。当您拥有大型数据集时,ELKI将更快,我邀请您自己对照ELKI对Weka进行基准测试。有关地理距离索引加速的详细信息,请参见出版物:

E.舒伯特,A.齐梅克,H.-p.克里格尔 《第十三届空间和时间数据库国际研讨会论文集》,SSTD,慕尼黑,德国:146–164,2013年


只要选择足够小的epsilon并使用真实世界的数据,R*-树通常会给您从^2到logn上大约的加速-如果您有数百万个点,加速通常是100x-1000x。

ELKI更具扩展性-并且已经包含此距离函数。它似乎也要快得多。