Hace unas semanas trabajé en un problema similar para detectar los picos adecuados en un sensor ruidoso. La tarea más importante aquí es seleccionar las características adecuadas. La pendiente parece una buena idea, tal vez no utilizando puntos vecinos, sino puntos de datos separados por una distancia fija (digamos 10 o 100, dependiendo de su tasa de muestreo). Si es crucial para ti utilizar herramientas de aprendizaje automático, te sugeriría que construyeras un conjunto de entrenamiento que puedas utilizar para entrenar modelos supervisados como Perceptrones Multicapa (red neuronal), SVM y demás. Los datos de entrenamiento deben ser etiquetados para poder entrenar modelos supervisados. Esto es lo que hice: Construir el conjunto de datos Encontré la posición inicial aproximada de la señal que quería detectar (en tu caso los primeros puntos de datos dentro del pico). Digamos que están en x_10, x_30 y x_53. A continuación, construiría un conjunto de datos en el que seleccionaría algunos de los puntos vecinos, lo que daría lugar a que el conjunto de datos tuviera este aspecto:
x_{8}, x_{9}, x_{10}, x_{11}, x_{12} x_{28}, x_{29}, x_{30}, x_{31}, x_{32} x_{51}, x_{52}, x_{53}, x_{54}, x_{55}
Además, seleccionaría unos cuantos puntos aleatorios en los datos en los que sé que no hay señal deseada y añadiría esos datos al conjunto de datos, digamos que esas observaciones están en x_14 y x_41. El conjunto de datos final se vería así:
x_{8}, x_{9}, x_{10}, x_{11}, x_{12} x_{28}, x_{29}, x_{30}, x_{31}, x_{32} x_{51}, x_{52}, x_{53}, x_{54}, x_{55} x_{12}, x_{13}, x_{14}, x_{15}, x_{16} x_{39}, x_{40}, x_{41}, x_{42}, x_{43}
El vector de etiquetas correspondiente, que indica al modelo la categoría de mis datos, tendría el siguiente aspecto:
[ 1, 1, 1, 0, 0 ]
lo que significa que las 3 primeras filas pertenecen a la clase 1 (deseada) y las dos últimas a la clase 0 (no deseada). Luego puse mis datos en un Perceptrón Multicapa con 3 capas (1 de entrada, 1 oculta, 1 de salida) (con funciones sigmoides para la no linealidad). Eso funcionó sorprendentemente bien para mí.
Abandonar el aprendizaje automático Aunque el MLP funcionó bien, acabé resolviendo mi problema con unas cuantas reglas if-else utilizando características más potentes como la varianza local, el valor absoluto de la señal y algunas más. Los umbrales se ajustaron manualmente (porque era más fácil que construir un gran conjunto de datos de entrenamiento). Por lo tanto, sugiero que se prueben reglas sencillas y que se prueben diferentes características. A partir de los gráficos que has publicado, parece que la señal es muy clara y, por lo tanto, el ajuste de los umbrales no es crucial si tienes buenas características. Algunas ideas: - Pendiente (por ejemplo, x_{i} - x_{i-T} donde T > 0) - Gran desviación de la media local (prueba para x_{i} > Promedio(x_{i-T},...,x_{i-1}) + a*Desviación estándar(x_{i-T},...,x_{i-1}), donde a podría ser 3 o más, dependiendo de lo claros/extremos que sean los picos) - Valor de x_{i} (si el valor de los picos es el mismo en todos los picos. No parece ser el caso en su ejemplo)