50 votos

Características para la clasificación de series temporales

Considero el problema de la (multiclase) clasificación basado en series temporales de longitud variable $T$ es decir, encontrar una función $$f(X_T) = y \in [1..K]\\ \text{for } X_T = (x_1, \dots, x_T)\\ \text{with } x_t \in \mathbb{R}^d ~,$$ mediante una representación global de la serie temporal por un conjunto de características $v_i$ de tamaño fijo $D$ independiente de $T$ , $$\phi(X_T) = v_1, \dots, v_D \in \mathbb{R}~,$$ y luego utilizar los métodos de clasificación estándar en este conjunto de características. Yo no interesado en la previsión, es decir, en predecir $x_{T+1}$ . Por ejemplo, podemos analizar la forma de caminar de una persona para predecir su sexo.

¿Cuáles son las características estándar que puedo tener en cuenta? En el ejemplo, podemos utilizar obviamente el media y desviación de la serie (o momentos de orden superior) y también buscar en el dominio de la frecuencia, como la energía contenida en algún intervalo de la Transformada discreta de Fourier de la serie (o Transformación Wavelet discreta ).

1voto

noah Puntos 61

En función de la longitud de la serie temporal, lo habitual es dividir los datos en segmentos, por ejemplo, de 10 segundos.

Sin embargo, a menudo, antes de dividir la serie temporal en segmentos es necesario realizar algún tipo de preprocesamiento, como el filtrado y el rechazo de artefactos. A continuación, se pueden calcular diversas características, como las basadas en la frecuencia (es decir, tomar una FFT para cada época), el tiempo (por ejemplo, la media, la varianza, etc. de la serie temporal en esa época) o la morfología (es decir, la forma de la señal/serie temporal en cada época).

Por lo general, las características utilizadas para clasificar los segmentos (épocas) de una serie temporal/señal son específicas del dominio, pero el análisis de Wavelet/Fourier son simplemente herramientas que permiten examinar la señal en los dominios de la frecuencia/tiempo-frecuencia en lugar de ser características en sí mismas.

En un problema de clasificación, cada época tendrá una etiqueta de clase, por ejemplo, "feliz" o "triste", y se entrenará un clasificador para distinguir entre épocas "felices" y "tristes" utilizando las 6 características calculadas para cada época.

En el caso de que cada serie temporal represente un único caso para la clasificación, es necesario calcular cada característica en todas las muestras de la serie temporal. La FFT sólo es pertinente en este caso si la señal es invariante en el tiempo lineal (LTI), es decir, si la señal puede considerarse estacionaria a lo largo de toda la serie temporal; si la señal no es estacionaria a lo largo del periodo de interés, puede ser más apropiado un análisis wavelet. Este enfoque significará que cada serie temporal producirá un vector de características y constituirá un caso para la clasificación.

0 votos

Siempre he pensado que dividir las series temporales, un proceso naturalmente continuo, en discreto periodos (o épocas), da lugar a una pérdida de información. A menos que haya épocas naturales en la serie, ¿cómo se eligen las épocas? Se pueden encontrar épocas probables que se ajusten a cualquier resultado deseado.

1 votos

No estoy seguro de que se pueda encontrar una época que se adapte a todos los resultados, pero para cualquier problema práctico con una señal no estacionaria es necesario encontrar alguna forma de tener en cuenta las variaciones temporales (si una señal/serie temporal se describe adecuadamente de forma analítica o es linealmente invariable en el tiempo, esto no es necesario). La longitud de la época es, de nuevo, específica del ámbito, pero normalmente se elige para que sea lo suficientemente corta como para que la señal sea estacionaria en el periodo de tiempo (época) de interés.

0 votos

BGreene, ¿podría explicar cuál es la ventaja de dividir la serie en épocas para seleccionar las características utilizadas en la clasificación? Veo esta partición como una ayuda para los cálculos posteriores (es decir, la FFT), pero no como algo relacionado con la selección de las características en sí. Tal vez esté relacionado con la "morfología" que has mencionado.

1voto

Hagbard Puntos 57

El Paquete TSFEL proporciona esto lista muy completa de posibles características de las series temporales. El código fuente muestra cómo se calcula cada característica en detalle.

A continuación encontrará una lista completa:

* abs_energy(signal)    Computes the absolute energy of the signal.
* auc(signal, fs)   Computes the area under the curve of the signal computed with trapezoid rule.
* autocorr(signal)  Computes autocorrelation of the signal.
* calc_centroid(signal, fs)     Computes the centroid along the time axis.
* calc_max(signal)  Computes the maximum value of the signal.
* calc_mean(signal)     Computes mean value of the signal.
* calc_median(signal)   Computes median of the signal.
* calc_min(signal)  Computes the minimum value of the signal.
* calc_std(signal)  Computes standard deviation (std) of the signal.
* calc_var(signal)  Computes variance of the signal.
* distance(signal)  Computes signal traveled distance.
* ecdf(signal[, d])     Computes the values of ECDF (empirical cumulative distribution function) along the time axis.
* ecdf_percentile(signal[, percentile])     Computes the percentile value of the ECDF.
* ecdf_percentile_count(signal[, percentile])   Computes the cumulative sum of samples that are less than the percentile.
* ecdf_slope(signal[, p_init, p_end])   Computes the slope of the ECDF between two percentiles.
* entropy(signal[, prob])   Computes the entropy of the signal using the Shannon Entropy.
* fft_mean_coeff(signal, fs[, nfreq])   Computes the mean value of each spectrogram frequency.
* fundamental_frequency(signal, fs)     Computes fundamental frequency of the signal.
* hist(signal[, nbins, r])  Computes histogram of the signal.
* human_range_energy(signal, fs)    Computes the human range energy ratio.
* interq_range(signal)  Computes interquartile range of the signal.
* kurtosis(signal)  Computes kurtosis of the signal.
* lpcc(signal[, n_coeff])   Computes the linear prediction cepstral coefficients.
* max_frequency(signal, fs)     Computes maximum frequency of the signal.
* max_power_spectrum(signal, fs)    Computes maximum power spectrum density of the signal.
* mean_abs_deviation(signal)    Computes mean absolute deviation of the signal.
* mean_abs_diff(signal)     Computes mean absolute differences of the signal.
* mean_diff(signal)     Computes mean of differences of the signal.
* median_abs_deviation(signal)  Computes median absolute deviation of the signal.
* median_abs_diff(signal)   Computes median absolute differences of the signal.
* median_diff(signal)   Computes median of differences of the signal.
* median_frequency(signal, fs)  Computes median frequency of the signal.
* mfcc(signal, fs[, pre_emphasis, nfft, …])     Computes the MEL cepstral coefficients.
* negative_turning(signal)  Computes number of negative turning points of the signal.
* neighbourhood_peaks(signal[, n])  Computes the number of peaks from a defined neighbourhood of the signal.
* pk_pk_distance(signal)    Computes the peak to peak distance.
* positive_turning(signal)  Computes number of positive turning points of the signal.
* power_bandwidth(signal, fs)   Computes power spectrum density bandwidth of the signal.
* rms(signal)   Computes root mean square of the signal.
* skewness(signal)  Computes skewness of the signal.
* slope(signal)     Computes the slope of the signal.
* spectral_centroid(signal, fs)     Barycenter of the spectrum.
* spectral_decrease(signal, fs)     Represents the amount of decreasing of the spectra amplitude.
* spectral_distance(signal, fs)     Computes the signal spectral distance.
* spectral_entropy(signal, fs)  Computes the spectral entropy of the signal based on Fourier transform.
* spectral_kurtosis(signal, fs)     Measures the flatness of a distribution around its mean value.
* spectral_positive_turning(signal, fs)     Computes number of positive turning points of the fft magnitude signal.
* spectral_roll_off(signal, fs)     Computes the spectral roll-off of the signal.
* spectral_roll_on(signal, fs)  Computes the spectral roll-on of the signal.
* spectral_skewness(signal, fs)     Measures the asymmetry of a distribution around its mean value.
* spectral_slope(signal, fs)    Computes the spectral slope.
* spectral_spread(signal, fs)   Measures the spread of the spectrum around its mean value.
* spectral_variation(signal, fs)    Computes the amount of variation of the spectrum along time.
* sum_abs_diff(signal)  Computes sum of absolute differences of the signal.
* total_energy(signal, fs)  Computes the total energy of the signal.
* wavelet_abs_mean(signal[, function, widths])  Computes CWT absolute mean value of each wavelet scale.
* wavelet_energy(signal[, function, widths])    Computes CWT energy of each wavelet scale.
* wavelet_entropy(signal[, function, widths])   Computes CWT entropy of the signal.
* wavelet_std(signal[, function, widths])   Computes CWT std value of each wavelet scale.
* wavelet_var(signal[, function, widths])   Computes CWT variance value of each wavelet scale.
* zero_cross(signal)    Computes Zero-crossing rate of the signal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X