DBSCAN clustering von geographischen Standortdaten

Ich habe einen dataframe mit Breitengrad-und Längengrad-Paare.

Hier ist mein dataframe Aussehen.

    order_lat  order_long
0   19.111841   72.910729
1   19.111342   72.908387
2   19.111342   72.908387
3   19.137815   72.914085
4   19.119677   72.905081
5   19.119677   72.905081
6   19.119677   72.905081
7   19.120217   72.907121
8   19.120217   72.907121
9   19.119677   72.905081
10  19.119677   72.905081
11  19.119677   72.905081
12  19.111860   72.911346
13  19.111860   72.911346
14  19.119677   72.905081
15  19.119677   72.905081
16  19.119677   72.905081
17  19.137815   72.914085
18  19.115380   72.909144
19  19.115380   72.909144
20  19.116168   72.909573
21  19.119677   72.905081
22  19.137815   72.914085
23  19.137815   72.914085
24  19.112955   72.910102
25  19.112955   72.910102
26  19.112955   72.910102
27  19.119677   72.905081
28  19.119677   72.905081
29  19.115380   72.909144
30  19.119677   72.905081
31  19.119677   72.905081
32  19.119677   72.905081
33  19.119677   72.905081
34  19.119677   72.905081
35  19.111860   72.911346
36  19.111841   72.910729
37  19.131674   72.918510
38  19.119677   72.905081
39  19.111860   72.911346
40  19.111860   72.911346
41  19.111841   72.910729
42  19.111841   72.910729
43  19.111841   72.910729
44  19.115380   72.909144
45  19.116625   72.909185
46  19.115671   72.908985
47  19.119677   72.905081
48  19.119677   72.905081
49  19.119677   72.905081
50  19.116183   72.909646
51  19.113827   72.893833
52  19.119677   72.905081
53  19.114100   72.894985
54  19.107491   72.901760
55  19.119677   72.905081

Möchte ich cluster dieser Punkte, die am nächsten zu einander(200 Meter Entfernung) folgende ist meine Distanz-matrix.

from scipy.spatial.distance import pdist, squareform
distance_matrix = squareform(pdist(X, (lambda u,v: haversine(u,v))))

array([[ 0.        ,  0.2522482 ,  0.2522482 , ...,  1.67313071,
     1.05925366,  1.05420922],
   [ 0.2522482 ,  0.        ,  0.        , ...,  1.44111548,
     0.81742536,  0.98978355],
   [ 0.2522482 ,  0.        ,  0.        , ...,  1.44111548,
     0.81742536,  0.98978355],
   ..., 
   [ 1.67313071,  1.44111548,  1.44111548, ...,  0.        ,
     1.02310118,  1.22871515],
   [ 1.05925366,  0.81742536,  0.81742536, ...,  1.02310118,
     0.        ,  1.39923529],
   [ 1.05420922,  0.98978355,  0.98978355, ...,  1.22871515,
     1.39923529,  0.        ]])

Dann bewerbe ich mich DBSCAN clustering-Algorithmus auf Distanz-matrix.

 from sklearn.cluster import DBSCAN

 db = DBSCAN(eps=2,min_samples=5)
 y_db = db.fit_predict(distance_matrix)

Ich weiß nicht, wie zu wählen, eps & min_samples Wert. It-Cluster der Punkte, die sind, Weg zu weit, in einem cluster.(ca 2 km Entfernung) Ist es, weil es berechnet die euklidische Distanz, während clustering? bitte helfen Sie.

Beachten Sie, dass DBSCAN nicht gebunden der paarweisen Distanzen in einem cluster. Es joins setzt mit radius epsilon transitiv, was bedeutet, es gibt keine sinnvolle Obere Grenze für die maximale Entfernung (eps+eps+eps+eps+eps+... jeder join-erhöht die maximale eps, also der maximale Abstand (numCorePointsInCluster+1)*epsilon). Es ist ein design Absicht des-Algorithmus, um das zu ermöglichen.
Ist es möglich, zu begrenzen die cluster size auf max, mit den verfügbaren DBSCAN Optionen?
Nein. Wenn alles verbunden ist, alles ist ein einziger cluster-definition. Und sollte es sein, durch das Konzept des clustering: ähnlich wie die Dinge sein sollten in der gleichen cluster, egal, wie viele. Wenn Sie mehr Interesse an controlling die Größe der cluster, Sie sind wahrscheinlich mehr in eine Quantisierung Methode statt.

InformationsquelleAutor Neil | 2016-01-03

Schreibe einen Kommentar