Con scipy.stats.linregress sto eseguendo una semplice regressione lineare su alcuni insiemi di dati sperimentali x, y altamente correlati, e inizialmente ispeziono visivamente ogni grafico a dispersione x, y per i valori anomali. Più generalmente (cioè programmaticamente) c'è un modo per identificare e mascherare i valori anomali?Scipy.stats può identificare e mascherare i valori anomali evidenti?
risposta
Il pacchetto statsmodels
ha ciò di cui hai bisogno. Guardate questo piccolo frammento di codice e la sua uscita:
# Imports #
import statsmodels.api as smapi
import statsmodels.graphics as smgraphics
# Make data #
x = range(30)
y = [y*10 for y in x]
# Add outlier #
x.insert(6,15)
y.insert(6,220)
# Make graph #
regression = smapi.OLS(x, y).fit()
figure = smgraphics.regressionplots.plot_fit(regression, 0)
# Find outliers #
test = regression.outlier_test()
outliers = ((x[i],y[i]) for i,t in enumerate(test) if t[2] < 0.5)
print 'Outliers: ', list(outliers)
Outliers: [(15, 220)]
Modifica
Con la versione più recente di statsmodels
, le cose sono cambiate un po '. Ecco un nuovo snippet di codice che mostra lo stesso tipo di rilevamento anomalo.
# Imports #
from random import random
import statsmodels.api as smapi
from statsmodels.formula.api import ols
import statsmodels.graphics as smgraphics
# Make data #
x = range(30)
y = [y*(10+random())+200 for y in x]
# Add outlier #
x.insert(6,15)
y.insert(6,220)
# Make fit #
regression = ols("data ~ x", data=dict(data=y, x=x)).fit()
# Find outliers #
test = regression.outlier_test()
outliers = ((x[i],y[i]) for i,t in enumerate(test.icol(2)) if t < 0.5)
print 'Outliers: ', list(outliers)
# Figure #
figure = smgraphics.regressionplots.plot_fit(regression, 1)
# Add line #
smgraphics.regressionplots.abline_plot(model_results=regression, ax=figure.axes[0])
Outliers: [(15, 220)]
Più in generale (cioè a livello di codice) esiste un modo per identificare e mascherare i valori anomali?
Esistono diversi algoritmi di rilevamento di anomalie; scikit-learn implementa alcuni di essi.
[Disclaimer:. Sono un collaboratore scikit-learn]
scipy.stats non ha nulla direttamente per valori anomali, in modo da rispondere alcuni link e pubblicità per statsmodels (che è un complemento per le statistiche SciPy .stats)
per valori anomali che identificano
http://jpktd.blogspot.ca/2012/01/influence-and-outlier-measures-in.html
http://jpktd.blogspot.ca/2012/01/anscombe-and-diagnostic-statistics.html
invece di mascheramento, un approccio migliore è quello di uso uno stimatore robusto
http://statsmodels.sourceforge.net/devel/rlm.html
con esempi, dove purtroppo non sono al momento visualizzate le trame http://statsmodels.sourceforge.net/devel/examples/generated/tut_ols_rlm.html
RLM downweights valori anomali . I risultati della stima hanno un attributo weights
e per i valori anomali i pesi sono inferiori a 1. Questo può essere utilizzato anche per trovare valori anomali. RLM
è anche più robusto se ci sono diversi valori anomali.
cos'è una matrice di progettazione esogena? Ho alcuni dati x, y: y = f (x). È una funzione prevalentemente lineare: y = mx + b. Dove comincio con questo stimatore robusto? La terminologia dei documenti è impenetrabile per me. –
È anche possibile limitare l'effetto di valori anomali utilizzando scipy.optimize.least_squares.In particolare, dai un'occhiata al parametro f_scale
:
Valore del margine morbido tra i valori inlomerali e quelli in uscita, il valore predefinito è 1.0. ... Questo parametro non ha effetto con loss = 'linear', ma per altri valori di perdita è di cruciale importanza.
Nella pagina si confronta 3 diverse funzioni: la normale least_squares
, e due metodi che coinvolgono f_scale
:
res_lsq = least_squares(fun, x0, args=(t_train, y_train))
res_soft_l1 = least_squares(fun, x0, loss='soft_l1', f_scale=0.1, args=(t_train, y_train))
res_log = least_squares(fun, x0, loss='cauchy', f_scale=0.1, args=(t_train, y_train))
Come si può vedere, le normali minimi quadrati è molto di più influenzato da dati anomali, e può valere la pena di giocare con diverse funzioni loss
in combinazione con diversi f_scales
. Le funzioni possibili di perdita sono (presi dalla documentazione):
‘linear’ : Gives a standard least-squares problem.
‘soft_l1’: The smooth approximation of l1 (absolute value) loss. Usually a good choice for robust least squares.
‘huber’ : Works similarly to ‘soft_l1’.
‘cauchy’ : Severely weakens outliers influence, but may cause difficulties in optimization process.
‘arctan’ : Limits a maximum loss on a single residual, has properties similar to ‘cauchy’.
Il libro di cucina SciPy has a neat tutorial sulla robusta regressione non lineare.
- 1. boxplot in matplotlib: Indicatori e valori anomali
- 2. scipy.stats seed?
- 3. calcolano i valori anomali in R
- 4. rimuovere i valori anomali in bwplot
- 5. geom_boxplot: mappa i livelli alfa in baffi e valori anomali
- 6. Come stampare valori anomali e serie originali?
- 7. ricerca e la rimozione valori anomali in PHP
- 8. Posso identificare un telefono jailbroken dai registri degli arresti anomali?
- 9. Rimuovere i valori anomali dal calcolo del coefficiente di correlazione
- 10. matplotlib: ignorare i valori anomali durante la stampa
- 11. Algoritmo rapido per calcolare percentili per rimuovere i valori anomali
- 12. Qualcuno può identificare questa codifica?
- 13. Creazione di pyplot.hist() primo e ultimo bin contiene valori anomali
- 14. Rimozione valori anomali facilmente in R
- 15. Trovare i punti anomali da matplotlib: boxplot
- 16. Identificare le preposizioni e i singoli POS
- 17. Come mascherare i messaggi di log log4j2
- 18. Etichettatura di valori anomali di boxplot in R
- 19. Python: può unittest visualizzare i valori previsti e reali?
- 20. rilevamento di valori anomali in una distribuzione sparsa?
- 21. Rimozione di valori anomali da un'immagine in scala di grigi
- 22. panda multiindice come mascherare i dati dal secondo livello
- 23. Matlab: eliminazione dei valori anomali nel set di dati
- 24. Identificare e descrivere i vincoli di tipo generico di Scala
- 25. Rimozione di valori anomali da un cluster k-medio
- 26. Includere indicazione di valori anomali estreme in ggplot
- 27. Ricerca di valori anomali in un set di dati
- 28. Filtraggio una Misura (o rimozione di valori anomali)
- 29. Etichettatura di valori anomali su boxplot in R
- 30. Come mascherare un UIView
Grazie per aver aggiunto le nuove informazioni! Grandi esempi, mi hanno davvero aiutato a capirlo. –