2014-12-11 11 views
5

Sto lavorando al progetto di comportamento dell'utente. Sulla base dell'interazione dell'utente ho alcuni dati. C'è una bella sequenza che aumenta e diminuisce gradualmente nel tempo. Ma ci sono poche discrepanze, che sono pessime. Si prega di fare riferimento al grafico seguente:Come normalizzare la sequenza di numeri?

Plotted sequence

si possono anche trovare dati qui:

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 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

vorrei appianare questa sequenza. La tecnica dovrebbe essere in grado di eliminare numeri con caratteristiche di X e Y, cioè errore in mono-crescente o mono-decrescente.

Se non si elimina, la tecnica dovrebbe essere in grado di spostarli in modo che la serie non sia influenzata da errori.

Quello che ho provato e fallito:

  1. ho cercato di testare la differenza tra i valori. In alcuni casi speciali funziona, ma per la sequenza come presentata in questo la distanza tra i numeri non è tale da escludere errori

  2. Ho provato ad applicare un contatore, che è un po 'X, quindi solo il cambiamento è accettato altrimenti punto è mappato solo al punto precedente. Qui ho grossi problemi nel decidere il valore di X, perché questo è basato sull'interazione dell'utente, non ne sono il vero controllore. Se l'interazione dell'utente è tale che la sua trama sarebbe un modello a zigzag, mi trovo alla fine con la situazione di "nessun dato di movimento dell'utente rilevato a tutti".

Si prega di condividere le tecniche di cui si è a conoscenza.

PS: i dati resi disponibili in questo esempio sono un caso particolare. Non esiste un modello tipico in cui si verifichino i numeri, ma ci aspettiamo che alcuni intervalli siano continui con tutti gli esempi. La soluzione che sto cercando è generica.

+0

Cosa sarebbe/potrebbe esserci di sbagliato con uno snellimento ingenuo su una manciata di valori? – JBL

+0

Immagino tu intenda il filtraggio passa-basso o il metodo medio di esecuzione. Con il filtraggio passa basso non sono in grado di decidere sulla frequenza, quindi non sono in grado di tagliare di nuovo gli errori. Con la media in esecuzione, gli errori X e Y vanno via, ma l'area cerchiata influisce negativamente sulla corsa, quindi molti errori rimangono come sono. – Adorn

+1

Cosa si intende per "normalizzare" nel titolo? –

risposta

1

Dato che non è possibile decidere su una frequenza di taglio, e nemmeno sul filtro che si desidera utilizzare, ne implementerei diversi e l'utente impostasse i parametri.

La prima cosa che ho pensato è running average, e puoi vedere che ci sono così tante cose da impostare, per ottenere diversi output.

1

Non so quanta fatica vuoi coinvolgere in questo problema ma se vuoi garanzie teoriche, la persistenza topologica sembra ben adattata al tuo problema imho. Fondamentalmente con questo metodo, puoi filtrare il massimo/minimo locale fissando una scala e ci sono prove teoriche che dicono che se il campionamento è vicino alla tua funzione, estrai il numero corretto di massimi con la persistenza. Puoi vedere questi slides (principalmente le pagine 7-9 per avere l'idea) per avere un'idea del metodo.

Fondamentalmente, se si prendono i punti come un paesaggio e si immagina uno spartiacque a partire dall'altezza massima e decrescente, si hanno alcune scelte. Ogni scelta ha un tempo in cui nasce, che è il momento in cui diventa emersa e un momento in cui muore, che è quando si fonde con una scelta più alta. Ora un diagramma di persistenza mostra un punto per ogni plettro dove le sue coordinate x/y sono il suo tempo di nascita/morte (supponendo che il primo plettro non muoia e non sia mostrato). Se un plettro è un massimo globale, allora sarà più lontano dalla diagonale nel diagramma di persistenza di un picco massimo locale. Per rimuovere i massimi locali devi rimuovere i plettri vicino alla diagonale. Ci sono quattro zampe massimi locali nel tuo esempio come si può vedere lo schema di persistenza dei dati (grazie per fornire i dati btw) e due quelle globali (la prima scelta non è raffigurato in un diagramma di persistenza): Persistence diagram of your function

Se i dati del rumore del genere: enter image description here

sarà ancora ottenere un diagramma di persistenza molto dignitoso che vi permetterà di filtrare massimo locale come si vuole:

enter image description here

P contratto di locazione se vuoi maggiori dettagli o riferimenti.

+0

Mi scuso per la risposta in ritardo. Non ho ancora provato la tua soluzione. Ma sembra carino. Aggiorneremo qui sui risultati non appena ci provo – Adorn

Problemi correlati