2016-06-09 13 views
0
entfernen

Ich plane eine Reise auf Google Maps. Die Menge an Daten bringt die Leistung der Karten nach unten, also suche ich nach einer Möglichkeit, die Datenmenge zu reduzieren. Insbesondere suche ich nach sehr ähnlichen Grundstücken.Ähnliche Datenpunkte aus Datensatz

Ich habe eine Reihe von Standortdaten, die eine Personenreise beschreiben. Diese Datenpunkte sind im Wesentlichen eine große Liste von Breiten- und Längenangaben mit einigen zugehörigen Metadaten, z. B. Geschwindigkeit.

Ich erinnere mich, dass ein lineares Regressionsmodell verwendet werden kann, um "ähnliche" Punkte zu entfernen, die entlang einer Linie nur auf Standortdaten basieren, aber kann es auch um ein anderes Feld wie Geschwindigkeit erweitert werden?

, d. H. Wenn ich die folgenden Punkte habe (ich verwende X, Y statt der Kürze halber). Ill Plot der Punkte in einem dia

  • {Lat: 0, Lng: 0, Geschwindigkeit: 0}
  • {Lat: 1, Lng: 1, Geschwindigkeit: 0} // entfernt werden kann
  • {Lat: 2, Lng: 2, Geschwindigkeit: 1} // kann entfernt werden
  • {Lat: 3, Lng: 3, Geschwindigkeit: 30} // große Änderung, behalten
  • {Lat: 4, Lng: 4, Geschwindigkeit: 30} // konnte entfernt werden
  • {Lat: 5, Lng: 5, Geschwindigkeit: 30} // konnte entfernt werden
  • {L um: 1, Lng: 5, Geschwindigkeit: 30} // große Änderung, behalten

Kann jemand mir etwas wirklichen Code geben, wie man dazu tut? Ich benutze Javascript, kann aber von jeder Sprache oder Pseudocode konvertieren. Wenn die Geschwindigkeit nicht berücksichtigt werden kann, kann mir bitte jemand mit dem linearen Regressionsalgorithmus helfen, nur für ähnliche Plotpunkte?

Entschuldigung, wenn meine mathematische Terminologie nicht großartig ist, bin ich ein bisschen aus meiner Tiefe Mathe weise!

+1

Könnten Sie nicht einfach durch das Array durchlaufen und vergleichen Sie jeden Punkt mit dem vorherigen Punkt, werfen diejenigen, die nicht genug unterschiedlich sind? – carebdayrvis

+0

Wie definieren Sie anders genug? Was ist, wenn es einen Punkt zwischen zwei Punkten gibt, der insofern unähnlich ist, als er vollständig zwischen den beiden Punkten liegt, aber wenn eine Linie zwischen ihnen gezogen wird, schneidet sie sich perfekt, ist also überflüssig? – Chris

Antwort

1

Hier ist ein Beispiel mit reduce, um alle Einträge durchzulaufen, die ein neues Array erstellen, Einträge werden ignoriert, falls sie zu ähnlich mit dem vorhergehenden Eintrag sind (distance*speed > 5);

var data = [ 
 
    { Lat: 0, Lng: 0, Speed: 0 }, 
 
    { Lat: 1, Lng: 1, Speed: 0 }, // could be removed 
 
    { Lat: 2, Lng: 2, Speed: 1 } ,// could be removed 
 
    { Lat: 3, Lng: 3, Speed: 30 }, // big change, keep 
 
    { Lat: 4, Lng: 4, Speed: 30 }, // could be removed 
 
    { Lat: 5, Lng: 5, Speed: 30 }, // could be removed 
 
    { Lat: 1, Lng: 5, Speed: 30 } 
 
] 
 

 
function distance(a,b){ 
 
    return Math.sqrt(Math.pow(a.Lat - b.Lat, 2) + Math.sqrt(Math.pow(a.Lng - b.Lng, 2))) 
 
} 
 

 
function speedDif(a,b){ 
 
    return Math.abs(a.Speed - b.Speed) 
 
} 
 
var res = data.reduce((ac,x) =>{ 
 
    if(!ac.length) 
 
    ac.push(x); 
 
    else { 
 
    const last = ac[ac.length -1 ]; 
 
    if(distance(last, x) * speedDif(last, x) > 5) //for ex.5 
 
    ac.push(x) 
 
    } 
 
    return ac; 
 
},[]) 
 

 
console.log(res)

1

Was Sie suchen scheint ein einfacher Entfernungsrechner zwischen den Punkten zu sein. Berechnen Sie also für jeden Punkt die Entfernung zum nächsten Punkt, und wenn sie größer ist als eine bestimmte Entfernung, behalten Sie sie, andernfalls entfernen Sie sie. Das einzige Problem dabei ist, dass du von (1,1) zu (2,2) zu (3,3) zu (4,4) zu ... (1000,1000) gehst und alles entfernst! Mein Vorschlag wäre, jeden Knoten mit dem vorherigen zu vergleichen, Entfernung zu berechnen, und DANN, wenn Sie ihn entfernen wollen, vergleichen Sie ihn zuerst mit dem letzten Knoten, den Sie NICHT entfernt haben. Auf diese Weise wissen Sie selbst dann, wenn Sie mehrere Knoten entfernen, die nahe beieinander liegen, dass Sie immer noch weit genug vom letzten Knoten entfernt sind, den Sie einbezogen haben. Dies ist nur ein Ansatz, um es ohne all die bösen linearen Regression Sachen zu tun ...

Verwandte Themen