2 votos

Consejo de entrada de datos de la red neuronal de retropropagación

Actualmente estoy realizando un proyecto de detección de baches y redes neuronales. Hasta ahora, tengo un teléfono Android que lee las lecturas del acelerómetro y escribe el eje X, Y, Z, así como la amplitud y la marca de tiempo actual en un archivo CSV. Los datos son entonces normalizados usando la normalización min-max y utiliza las lecturas del eje Y del archivo CSV. El problema al que me enfrento para que la red neuronal aprenda un bache es el hecho de que ¿qué datos debo alimentar a la red neuronal de retropropagación? ¿Debo establecer un umbral y cuando el eje Y llegue a este punto, obtener los 5 puntos anteriores y los 5 posteriores y luego alimentar la red con 11 entradas? No quiero sobreentrenar la red ni alimentarla con datos en diferentes posiciones cada vez.

Entrenamiento - También estoy empezando a reunir los datos recogidos y crear un conjunto de datos de entrenamiento - ¿debería poner cosas como las lecturas de las carreteras normales/con baches/de la velocidad, así como los baches? ¿Qué tamaño debe tener un conjunto de entrenamiento? o ¿es cierto que "cuantos más datos, mejor"?

Este es el aspecto de los datos sobre baches.

http://i.stack.imgur.com/4cSzt.png

Así es como se ven los datos del badén.

http://i.stack.imgur.com/7BLjq.png

Una muestra de los datos recogidos:

 X-Axis     Y-Axis    Z-Axis   Timestamp

-0.371827, 8.513097, 5.441484, 165401
-0.601749, 7.976613, 5.326523, 165601
-0.333506, 8.053253, 5.441484, 165801
-0.256866, 8.206534, 5.364844, 166001
0.049697, 8.398136, 5.364844, 166202
-0.371827, 8.436457, 5.211563, 166400
-0.256866, 8.551417, 5.709726, 166601
-0.256866, 8.513097, 5.403164, 166801
-0.333506, 8.474776, 5.709726, 167000
-0.563428, 8.628057, 5.594766, 167201
-0.563428, 7.401808, 4.713398, 167402
-1.981280, 5.447472, 4.406836, 167602    POTHOLE
-0.180225, 5.600753, 5.403164, 167800    POTHOLE
-0.984952, 8.053253, 4.445156, 168001
-1.214874, 8.666378, 5.671406, 168201
-0.525108, 7.210207, 3.870352, 168401
-1.138233, 7.286847, 5.824687, 168600
-0.601749, 10.045910, 5.288203, 168801
-0.180225, 8.206534, 5.173242, 169001
0.279619, 7.861651, 5.518125, 169200
0.202978, 8.934620, 5.824687, 169401
-0.065264, 8.321495, 5.364844, 169601
-0.065264, 8.628057, 5.709726, 169800
-0.716710, 8.014933, 5.748047, 170001
-0.141905, 8.513097, 5.441484, 170200
-0.026944, 8.206534, 5.594766, 170401
-0.601749, 8.168214, 5.058281, 170601

Algoritmo

El algoritmo que propongo es establecer un determinado umbral, como la línea 12, en los datos de la muestra, cuando el eje Y alcanza un determinado umbral, como <7, entonces pasa los 5 puntos anteriores y los 5 puntos posteriores a la NN.

1voto

christy Puntos 51

Teniendo en cuenta tu comentario, supongo que lo que distingue a un bache de un badén es en gran medida la velocidad del vehículo al entrar en él. Creo que tu idea de buscar posiciones Y atípicas y luego pasar una ventana de datos circundante es un buen punto de partida. Lo que esto significa entonces es que tu conjunto de datos de entrenamiento tendrá que tener 11 valores para cada patrón conocido que tengas.

Si su biblioteca de redes neuronales tiene un función de activación softmax para la capa de salida, tal vez pueda utilizar una sola red para aprender e identificar baches, badenes y carreteras normales.

Como alternativa, puedes entrenar dos redes distintas: una red aprendería/identificaría lo bueno frente a los baches, y la otra lo bueno frente a los badenes. Cada nuevo patrón se daría a ambas redes y se considerarían los pares de salida (idealmente [0,1] o [1,0]).

En cuanto al tamaño del conjunto de entrenamiento, empiece por algo pequeño (por ejemplo, 10 ejemplos de cada caso), evalúe la precisión fuera de la muestra (por lo que tendrá que reservar algunos patrones conocidos adicionales como conjunto de reserva), y luego mejore iterativamente añadiendo más patrones de entrenamiento y/o cambiando el diseño de la red y los ajustes de optimización. Si resulta que estás codificando esto en Python, PyBrain tiene una buena documentación de ejemplo.

1voto

Jasmine D Puntos 1

Voy a responder a tu pregunta sobre la cantidad de datos de entrenamiento.

Parece que tiene un problema de clasificación de 2 o 3 clases, ¿pertenece esta instancia de datos a un bache, a un badén o quizás a una carretera normal?

Dado un número finito de muestras, quieres tener una estimación de la precisión de tu algoritmo de predicción. Para hacer esta estimación, necesita reservar algunas muestras en las que su algoritmo no haya sido entrenado y en las que pueda medir la precisión del algoritmo de clasificación que ha producido, esto se conoce comúnmente como el conjunto de prueba.

Cuantos más datos se utilicen para el entrenamiento, menos habrá para comprobar la precisión del algoritmo. En consecuencia, la varianza de la estimación de la precisión en un conjunto de pruebas pequeño será potencialmente muy alta.

En general, es poco probable que una sola partición de los datos en conjuntos de entrenamiento y de prueba proporcione una estimación insesgada de la precisión. Este es un camino bien recorrido, por lo que existen algunos enfoques estándar para producir estimaciones más fiables.

Probablemente, las dos más populares son la validación cruzada de n veces, en la que el conjunto de datos se divide en n conjuntos de entrenamiento y de prueba distintos. Los modelos se entrenan con los datos de entrenamiento y se prueban con los datos de prueba para cada una de las n particiones. Normalmente, n se fija en 10, y las precisiones resultantes de las n pruebas se promedian para obtener una cifra de precisión global. Validación cruzada .

El segundo método se repite en el que todos los datos se dividen aleatoriamente en dos partes, normalmente 50%/50%, se entrenan los modelos y se prueban. A continuación, se promedian las precisiones resultantes.

Si aún no está familiarizado con ellos, conjuntos de herramientas como WEKA o R tendrán métodos para estimar estas precisiones y para construir redes neuronales y otros modelos listos para que los utilice sin más.

Una vez que haya decidido su enfoque para el submuestreo de los datos de las series temporales, puede considerar la posibilidad de comparar el rendimiento de otros enfoques de modelado, como los bosques aleatorios o los modelos lineales generalizados (GLM), que requieren muy poco ajuste en comparación con las redes neuronales y pueden ofrecer un rendimiento muy bueno. Un kit de herramientas como WEKA facilitará la experimentación con algoritmos alternativos. WEKA .

No estoy seguro de si las otras muestras de tus datos apoyan estas observaciones, pero uno podría imaginar que un bache se caracterizaría por una aceleración negativa brusca del eje z (eje z alineado perpendicularmente a la superficie de la carretera) seguida de una aceleración positiva brusca del eje z con poco tiempo entre medias. Un badén sería lo contrario, una aceleración brusca del eje z negativo seguida de una aceleración brusca del eje z negativo, probablemente con una duración algo mayor entre los dos eventos y un perfil de aceleración menos pronunciado. En el caso de los badenes, el tiempo de las aceleraciones dependerá del perfil del badén, algunos tienen mesetas largas, ¿tienes información sobre el tipo de badenes de los que proceden los datos?

Como sugieres, es muy posible que haya una desaceleración paralela (en el eje Y, orientación de la parte delantera a la trasera del coche) en el caso del badén, ya que el conductor puede haber sido consciente de él y haber reducido la velocidad en consecuencia. Esto es menos probable en el caso de un bache, pero no es desconocido.

A la hora de seleccionar la región de la serie temporal que se utilizará para el entrenamiento, es posible que desee combinar la probabilidad de que el conductor desacelere con los perfiles de aceleración del eje z para los dos tipos de obstrucción de la carretera para ayudarle a elegir buenas regiones. Parece probable que encuadrar las muestras correctas de forma consistente aumentará significativamente la precisión.

-1voto

Tom Puntos 1101

No tanto como una respuesta, sino como una pregunta. Supongo que el coche en el segmento de estado de reposo es la línea de base promediada con su potencial de "golpes". Tuve un problema al analizar los datos de potenciales evocados en los que había artefactos, o peor aún, "datos perdidos". SPSS asignaría 0 a los datos que faltan y bmdp sólo hizo un promedio general, por lo tanto, con la ayuda del tipo de matemáticas en el departamento que / diseñó un algoritmo de un cero a la siguiente pico de análisis. No era tan simple, pero bastante cerca. Voy a comprobar más tarde esto puede no ser aplicable a su situación.

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