Ho un flusso di dati interi e voglio eseguire alcune analisi statistiche su di esso. Voglio calcolare la media e la deviazione standard di esso. Finora non è difficile, ma tieni presente che sto parlando di flussi di dati, preferirei non archiviare tutti i dati. Esiste sia un algoritmo per la media che la deviazione per mantenere i dati memorizzati al minimo - mi riferisco a Wikipedia in questa materia.
Ma il problema ora è che alcuni dati saranno completamente assurdi rispetto al resto dei dati. Per esempio riceverò
1 2 2134 7 -2 14 // 2134 is out of line and junk, don't calculate with it
So in quali intervalli saranno probabilmente i miei valori, ma solo in relazione al loro valore medio. Quindi mi piacerebbe sapere se c'è un buon approccio per affrontare questo tipo di rumori.
È ancora più fastidioso, dato che i dati spazzatura saranno probabilmente i primi ad arrivare e non in linea con il valore medio del resto della sequenza, quindi non posso precalcolare il valore medio. Un esempio potrebbe essere qualcosa di simile
1111 1564 13 1645 12 -4 37 90 ...
Il junk rende < 5%
dei dati, quindi almeno non c'è molto rumore, ma devo tenerlo fuori dai miei calcoli.
Per distinguere tra dati reali e dati spazzatura, so che i dati reali si trovano in un intervallo limitato attorno al valore medio - adattato all'esempio precedente, sarebbe qualcosa come + -200. I "gruppi" di dati spazzatura possono comportarsi allo stesso modo, solo che il loro valore medio differisce di almeno 1 volte la lunghezza dell'intervallo dal valore medio dei dati reali.
All'inizio, senza dati, non ho idea di quale potrebbe essere il valore medio dei dati reali.
Posso riprodurre una quantità limitata / piccola frazione di dati solo salvandoli prima in memoria.
Esiste un buon algoritmo che occupa meno spazio possibile e funziona quando applicato iterativamente a una sequenza?