2014-12-11 6 views
5

Ich arbeite Benutzerverhalten Projekt. Basierend auf Benutzerinteraktion habe ich einige Daten. Es gibt eine schöne Sequenz, die mit der Zeit gleichmäßig zunimmt und abnimmt. Aber es gibt kleine Diskrepanzen, die sehr schlecht sind. Siehe unten grafisch darzustellen:Wie normalisiert man die Reihenfolge der Zahlen?

2,0789 2,09604 2,11472 2,13414 2,15609 2,17776 2,2021 2,22722 2,25019 2,27304 2,29724 2,31991 2,34285 2,36569 2,38682 2,40634 2,42068 2,43947 2,45099 2,46564 2,48385 2,49747 2,49031 2,51458:

Plotted sequence

Sie auch Daten finden Sie hier 2,5149 2,52632 2,54689 2,56077 2,57821 2,57877 2,59104 2,57625 2,55987 2,5694 2,56244 2,56599 2,54696 2,52479 2,50345 2,48306 2,50934 2,4512 2,43586 2,40664 2,38721 2,3816 2,36415 2,33408 2,31225 2,28801 2,26583 2,24054 2,2135 2,19678 2,16366 2,13945 2,11102 2,08389 2,05533 2,02899 2,00373 1,9752 1,94862 1,91982 1,89125 1,86307 1,83539 1,80641 1,77946 1 .75333 1,72765 1,70417 1,68106 1,65971 1,64032 1,62386 1,6034 1,5829 1,56022 1,54167 1,53141 1,52329 1,51128 1,52125 1,51127 1,50753 1,51494 1,51777 1,55563 1,56948 1,57866 1,60095 1,61939 1,64399 1,67643 1,70784 1,74259 1,7815 1,81939 1,84942 1,87731 1,89895 1,91676 1,92987

Ich mag diese Sequenz glätten. Die Technik sollte in der Lage sein, Zahlen mit der Charakteristik von X und Y zu eliminieren, d. H. Fehler bei der Mono-Erhöhung oder Mono-Verringerung.

Wenn nicht eliminieren, sollte die Technik in der Lage sein, sie so zu verschieben, dass die Serie nicht von Fehlern betroffen ist.

Was habe ich versucht und sind gescheitert:

  1. Ich versuchte Differenz zwischen den Werten zu testen. In einigen speziellen Fällen funktioniert es, aber für die Sequenz wie in diesem Fall der Abstand zwischen Zahlen ist nicht so, dass ich Fehler ausschneiden kann

  2. Ich habe versucht, einen Zähler, der einige X ist, dann nur ändern wird akzeptiert, sonst Punkt wird nur dem vorherigen Punkt zugeordnet. Hier habe ich große Schwierigkeiten, den Wert von X zu bestimmen, weil dies auf Benutzerinteraktion basiert, ich bin nicht wirklich Controller davon. Wenn die Benutzerinteraktion so ist, dass ihr Diagramm ein Zickzack-Muster wäre, würde ich mit der Situation "keine Benutzerbewegungsdaten überhaupt erkannt" enden.

Bitte teilen Sie die Techniken, die Sie kennen.

PS: Die in diesem Beispiel zur Verfügung gestellten Daten sind ein spezieller Fall. Es gibt kein typisches Muster, in dem Zahlen auftreten werden, aber wir erwarten, dass einige Bereiche mit allen Beispielen übereinstimmen. Die Lösung, nach der ich suche, ist generisch.

+0

Was wäre/könnte falsch mit einer naiven Glättung über eine Handvoll Werte sein? – JBL

+0

Ich nehme an, du meinst Tiefpassfilterung oder laufende Mittelwertmethode. Bei der Tiefpassfilterung kann ich mich nicht über die Frequenz entscheiden, so dass Fehler nicht mehr aussortiert werden können. Mit laufendem Mittelwert gehen X- und Y-Fehler weg, aber eingekreiste Bereiche beeinflussen den laufenden Mittelwert schlecht, so dass viele Fehler dort bleiben, wie sie sind. – Adorn

+1

Was bedeutet der Begriff "normalisieren" im Titel? –

Antwort

1

Da Sie sich nicht für eine Grenzfrequenz entscheiden können, und nicht einmal für den Filter, den Sie verwenden möchten, würde ich mehrere implementieren und den Benutzer die Parameter einstellen lassen.

Das erste, woran ich dachte, ist running average, und Sie können sehen, dass es so viele Dinge zu setzen gibt, um verschiedene Ausgaben zu bekommen.

1

Ich weiß nicht, wie viel Mühe Sie in dieses Problem einbeziehen möchten, aber wenn Sie theoretische Garantien wollen, topologische Persistenz scheint gut auf Ihr Problem imho angepasst. Grundsätzlich mit dieser Methode können Sie lokale Maximum/Minimum durch Fixieren einer Skala filtrieren und es gibt Theoritical Beweise, die besagt, dass, wenn Sie Stichprobe schließen von Ihrer Funktion, dann Sie die korrekte Anzahl der Maximalwerte mit Persistenz extrahiert. Sie können diese slides (hauptsächlich Seiten 7-9, um die Idee zu bekommen) sehen, um eine Idee von der Methode zu bekommen.

Grundsätzlich, wenn Sie Ihre Punkte als Landschaft nehmen und sich eine Wasserscheide vorstellen, die von maximaler Höhe beginnt und abnimmt, haben Sie einige Tipps. Jedes Plektrum hat eine Zeit, in der es geboren wird. Es ist die Zeit, in der es entsteht, und eine Zeit, in der es stirbt, wenn es mit einem höheren Pickel verschmilzt. Nun zeigt ein Persistenzdiagramm einen Punkt für jedes Plektrum, bei dem seine x/y-Koordinaten seine Geburts-/Todeszeit sind (bei Annahme, dass der erste Stich nicht stirbt und nicht gezeigt wird). Wenn ein Pick ein globales Maximum ist, dann wird es im Persistenzdiagramm weiter von der Diagonale entfernt sein als ein lokales Maximum Pick. Um lokale Maxima zu entfernen, müssen Sie die Picks in der Nähe der Diagonalen entfernen. Es gibt Vieren lokale Maxima in Ihrem Beispiel, wie Sie mit der Persistenz Diagramm Ihre Daten (Dank für die Bereitstellung der Daten btw) und zwei global diejenigen (die ersten Pick im Bild nicht in einem Persistenz-Diagramm) sehen: Persistence diagram of your function

wenn Sie Geräusch Ihre Daten wie folgt aus: enter image description here

Sie werden nach wie vor eine sehr anständige Ausdauer Diagramm erhalten, die Sie lokale Maximum filtern können, wie Sie wollen:

enter image description here

P Lease fragen, wenn Sie mehr Details oder Referenzen wünschen.

+0

Es tut mir leid für die verzögerte Antwort. Ich habe deine Lösung noch nicht ausprobiert. Aber es scheint nett zu sein. Will hier über die Ergebnisse aktualisieren, sobald ich es versuche – Adorn

Verwandte Themen