Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Suavizado de datos y detección de valores atípicos

El suavizado de datos se refiere a técnicas para eliminar ruidos o comportamientos no deseados en los datos, mientras que la detección de valores atípicos identifica los puntos de datos que son significativamente diferentes del resto de los datos.

Mover los métodos de ventana

Los métodos de ventana móvil son formas de procesar los datos en lotes más pequeños a la vez, normalmente para representar estadísticamente una vecindad de puntos en los datos. La media móvil es una técnica de suavizado de datos común que desliza una ventana a lo largo de los datos, calculando la media de los puntos dentro de cada ventana. Esto puede ayudar a eliminar variaciones insignificantes de un punto de datos a otro.

Por ejemplo, considere las mediciones de velocidad del viento tomadas cada minuto durante aproximadamente 3 horas. Utilice la función con un tamaño de ventana de 5 minutos para suavizar las ráfagas de viento de alta velocidad.movmean

load windData.mat mins = 1:length(speed); window = 5; meanspeed = movmean(speed,window); plot(mins,speed,mins,meanspeed) axis tight legend('Measured Wind Speed','Average Wind Speed over 5 min Window','location','best') xlabel('Time') ylabel('Speed')

Del mismo modo, puede calcular la velocidad mediana del viento sobre una ventana deslizante utilizando la función.movmedian

medianspeed = movmedian(speed,window); plot(mins,speed,mins,medianspeed) axis tight legend('Measured Wind Speed','Median Wind Speed over 5 min Window','location','best') xlabel('Time') ylabel('Speed')

No todos los datos son adecuados para suavizar con un método de ventana móvil. Por ejemplo, cree una señal sinusoidal con ruido aleatorio inyectado.

t = 1:0.2:15; A = sin(2*pi*t) + cos(2*pi*0.5*t); Anoise = A + 0.5*rand(1,length(t)); plot(t,A,t,Anoise) axis tight legend('Original Data','Noisy Data','location','best')

Utilice una media móvil con un tamaño de ventana de 3 para suavizar los datos ruidosos.

window = 3; Amean = movmean(Anoise,window); plot(t,A,t,Amean) axis tight legend('Original Data','Moving Mean - Window Size 3')

La media móvil logra la forma general de los datos, pero no captura los valles (mínimos locales) con mucha precisión. Dado que los puntos del valle están rodeados por dos vecinos más grandes en cada ventana, la media no es una muy buena aproximación a esos puntos. Si hace que el tamaño de la ventana sea mayor, la media elimina los picos más cortos por completo. Para este tipo de datos, puede considerar técnicas de suavizado alternativas.

Amean = movmean(Anoise,5); plot(t,A,t,Amean) axis tight legend('Original Data','Moving Mean - Window Size 5','location','best')

Métodos de suavizado comunes

La función proporciona varias opciones de suavizado, como el método Savitzky-Golay, que es una técnica de suavizado popular utilizada en el procesamiento de señales.smoothdata De forma predeterminada, elige el tamaño de ventana que mejor se adivina para el método en función de los datos.smoothdata

Utilice el método Savitzky-Golay para suavizar la señal ruidosa, y la salida del tamaño de la ventana que utiliza.Anoise Este método proporciona una mejor aproximación del valle en comparación con.movmean

[Asgolay,window] = smoothdata(Anoise,'sgolay'); plot(t,A,t,Asgolay) axis tight legend('Original Data','Savitzky-Golay','location','best')

window
window = 3 

El método LOWESS robusto es otro método de suavizado que es particularmente útil cuando los valores atípicos están presentes en los datos además del ruido. Inyecte un valor atípico en los datos ruidosos y utilice LOWESS robusta para suavizar los datos, lo que elimina el valor atípico.

Anoise(36) = 20; Arlowess = smoothdata(Anoise,'rlowess',5); plot(t,Anoise,t,Arlowess) axis tight legend('Noisy Data','Robust Lowess')

La detección de valores atípicos

Los valores atípicos de los datos pueden sesgar significativamente los resultados de procesamiento de datos y otras cantidades calculadas. Por ejemplo, si intenta suavizar los datos que contienen valores atípicos con una mediana móvil, puede obtener picos o valles engañosos.

Amedian = smoothdata(Anoise,'movmedian'); plot(t,Anoise,t,Amedian) axis tight legend('Noisy Data','Moving Median')

La función devuelve un valor lógico 1 cuando se detecta un valor atípico.isoutlier Compruebe el índice y el valor del valor atípico en.Anoise

TF = isoutlier(Anoise); ind = find(TF)
ind = 36 
Aoutlier = Anoise(ind)
Aoutlier = 20 

Puede utilizar la función para reemplazar los valores atípicos de los datos especificando un método de relleno.filloutliers Por ejemplo, rellene el valor atípico con el valor de su vecino inmediatamente a la derecha.Anoise

Afill = filloutliers(Anoise,'next'); plot(t,Anoise,t,Afill) axis tight legend('Noisy Data with Outlier','Noisy Data with Filled Outlier')

Datos no uniformes

No todos los datos constan de puntos igualmente espaciados, lo que puede afectar a los métodos de procesamiento de datos. Cree un vector que contenga tiempos de muestreo irregulares para los datos en.datetimeAirreg El vector representa muestras tomadas cada minuto durante los primeros 30 minutos, luego cada hora durante dos días.time

t0 = datetime(2014,1,1,1,1,1); timeminutes = sort(t0 + minutes(1:30)); timehours = t0 + hours(1:48); time = [timeminutes timehours]; Airreg = rand(1,length(time)); plot(time,Airreg) axis tight

Por defecto, suaviza con respecto a los enteros igualmente espaciados, en este caso,.smoothdata1,2,...,78 Dado que las marcas de tiempo enteros no se coordinan con el muestreo de los puntos en, la primera media hora de datos sigue apareciendo ruidosa después del suavizado.Airreg

Adefault = smoothdata(Airreg,'movmean',3); plot(time,Airreg,time,Adefault) axis tight legend('Original Data','Smoothed Data with Default Sample Points')

Muchas funciones de procesamiento de datos en MATLAB®, incluyendo, y, le permiten proporcionar puntos de muestra, asegurando que los datos se procesan en relación con sus unidades de muestreo y frecuencias.smoothdatamovmeanfilloutliers Para eliminar la variación de alta frecuencia en la primera media hora de los datos, utilice la opción con las marcas de tiempo en.Airreg'SamplePoints'time

Asamplepoints = smoothdata(Airreg,'movmean',hours(3),'SamplePoints',time); plot(time,Airreg,time,Asamplepoints) axis tight legend('Original Data','Smoothed Data with Sample Points')

Consulte también

| | | |

Temas relacionados