Está en la página 1de 15

Clasificación de vocalizaciones de ave

Introducción al problema.

El problema planteado consiste en la necesidad de diseñar un sistema automático capaz de detectar y


clasificar los cantos de aves a partir de grabaciones acústicas. Esta demanda surge de la dificultad y la
laboriosidad que implica el análisis manual de estas grabaciones por parte de expertos humanos.

El contexto de aplicación de este sistema se enfoca en entornos naturales específicos, como parques
naturales o zonas estrictamente protegidas, donde la observación directa de la fauna puede ser complicada o
limitada. Además, se destaca la utilidad de este sistema en situaciones desafiantes, como durante la noche,
en condiciones climáticas adversas o en áreas de difícil acceso.
El objetivo principal de este proyecto es desarrollar una herramienta de clasificación automática de cantos
de aves que permita identificar al menos 20 especies que son típicas del parque natural de Girona. Esto
implicaría la capacidad de analizar grabaciones de audio y reconocer patrones específicos que correspondan
a cada especie de ave.

Explicación del pipeline utilizado.

El pipeline utilizado se estructura de la siguiente manera:

1. Importación de bibliotecas:
Se importan todas las bibliotecas necesarias para el procesamiento de datos, extracción de características,
entrenamiento de modelos de aprendizaje automático y evaluación de resultados. Estas bibliotecas incluyen
herramientas para manipular datos (como pandas), procesamiento de señales de audio (como librosa),
algoritmos de aprendizaje automático (como RandomForestClassifier, SVC, etc.), y herramientas de
evaluación de modelos (como sklearn.metrics).

2. Definición de funciones de extracción de características:


Se definen funciones que se encargan de extraer características relevantes de los segmentos de audio. Estas
funciones utilizan la biblioteca librosa para calcular características como la tasa de cruce por cero, centroides
espectrales, ancho de banda espectral, coeficientes MFCC, entre otros.

3. Procesamiento de datos:
Se define una función principal, `process_audio_folder`, que procesa todos los archivos de audio en una
carpeta dada, extrayendo las características de cada segmento de audio y almacenando los resultados en un
DataFrame de pandas.

4. Guardado de datos:
Se define una función para guardar el DataFrame de características en un archivo CSV para su posterior uso.

5. Visualización de datos:
Se incluye una función para visualizar el recuento de registros por especie de ave mediante un diagrama de
barras.

6. División del conjunto de datos:


Se incluye una función para dividir el conjunto de datos en conjuntos de entrenamiento y prueba,
asegurándose de que los segmentos de audio con el mismo nombre vayan exclusivamente a uno de los
conjuntos.

Minería de datos

Lucy Garay
Adriana Castillo
7. Preprocesamiento de datos:
Se realiza un preprocesamiento de los datos, que incluye la eliminación de columnas no deseadas y la
codificación de las etiquetas de las especies de aves.

8. Balanceo de clases:
Dado que es probable que el conjunto de datos contenga clases desbalanceadas, se aplica un método de
sobremuestreo (RandomOverSampler) para equilibrar la distribución de clases.

9. Entrenamiento de modelos:
Se entrenan varios modelos de aprendizaje automático, como Random Forest, Gradient Boosting, SVM,
KNN, y redes neuronales, utilizando los conjuntos de datos de entrenamiento.

10. Evaluación de modelos:


Se evalúan los modelos entrenados utilizando el conjunto de datos de prueba. Se calculan métricas de
rendimiento como la precisión, el puntaje F1, y se generan matrices de confusión y curvas ROC para evaluar
el rendimiento del modelo en diferentes métricas.

Análisis exploratorio y features escogidas.

1. Zero-Crossing Rate (Tasa de Cruce por Cero):


El zero-crossing rate es una medida de la cantidad de veces que una señal cruza el eje horizontal (es decir, el
valor cero) en un intervalo de tiempo dado. En el código, se calcula la media (`zcr_mean`) y la desviación
estándar (`zcr_std`) de la tasa de cruce por cero en el segmento de audio. Esta característica puede ser útil
para distinguir entre sonidos con diferentes niveles de actividad o cambios de dirección en la señal.

2. Spectral Centroid (Centroide Espectral):


El centroide espectral es una medida que indica donde está centrada la distribución de frecuencias de una
señal de audio. En el código, se calcula tanto la media (`centroid_mean`) como la desviación estándar
(`centroid_std`) del centroide espectral. Un centroide más alto puede indicar que la señal de audio está
dominada por frecuencias más altas, mientras que un centroide más bajo puede indicar que la señal está
dominada por frecuencias más bajas.

3. Spectral Bandwidth (Ancho de Banda Espectral):


El ancho de banda espectral es una medida de la anchura de la distribución de frecuencias en una señal de
audio. En el código, se calcula tanto la media (`bandwidth_mean`) como la desviación estándar
(`bandwidth_std`) del ancho de banda espectral. Un ancho de banda más amplio puede indicar una mayor
variedad de frecuencias presentes en la señal de audio.

4. Spectral Rolloff (Declinación Espectral):


La declinación espectral es una medida de la frecuencia por debajo de la cual se encuentra una cierta
fracción de la energía total del espectro. En el código, se calcula tanto la media (`rolloff_mean`) como la
desviación estándar (`rolloff_std`) de la declinación espectral. Una declinación espectral más alta puede
indicar una mayor presencia de energía en frecuencias más altas en la señal de audio.

5. Transformada de Fourier:
La transformada de Fourier se utiliza para descomponer una señal de audio en sus componentes de
frecuencia. En el código, se calculan tanto la parte real (`fourier_real`) como la parte imaginaria

Minería de datos

Lucy Garay
Adriana Castillo
(`fourier_imag`) de la transformada de Fourier. Estas características pueden proporcionar información sobre
la distribución de frecuencias presentes en la señal de audio.

6. Tono (Pitch):
El tono de una señal de audio se refiere a la frecuencia fundamental predominante en la señal. En el código,
se calcula el tono promedio (`pitch`) de la señal de audio. Esta característica puede ser útil para distinguir
entre diferentes tonos de voz o sonidos de diferentes frecuencias fundamentales.

7. RMS (Root Mean Square):


El RMS es una medida de la potencia promedio de una señal de audio. En el código, se calcula la media
(`rms_mean`) del RMS de la señal de audio. Esta característica puede proporcionar información sobre el
nivel de energía general de la señal.

8. MFCC (Mel-Frequency Cepstral Coefficients):


Los coeficientes cepstrales de frecuencia mel (MFCC) son coeficientes que representan la forma del
espectro de frecuencia de una señal de audio en una escala de frecuencia no lineal. En el código, se calculan
los coeficientes MFCC junto con sus derivadas temporales (`mfcc_mean`, `mfcc_mean_delta`,
`mfcc_mean_delta_delta`). Estas características capturan información sobre las características espectrales de
la señal de audio.

9. Contraste Espectral:
El contraste espectral es una medida que cuantifica las diferencias en energía entre diferentes bandas de
frecuencia en una señal de audio. En el código, se calcula tanto la media como la desviación estándar del
contraste espectral (`sc_mean`, `sc_std`). Esta característica puede proporcionar información sobre la textura
o la "textura" de la señal de audio.
Estas características se seleccionan cuidadosamente para capturar diferentes aspectos de la señal de audio
que pueden ser relevantes para la clasificación de cantos de aves.

Explicación de los distintos modelos de Machine Learning.

Carga de Dataset:

En esta sección se carga el conjunto de datos desde un archivo CSV utilizando pandas.

Dividir Train, Test:


Se define una función `split_dataset_by_audio_name` que divide el conjunto de datos en conjuntos de
entrenamiento y prueba asegurando que los audios con el mismo nombre vayan exclusivamente a uno de los
conjuntos. Esto es importante para evitar la filtración de datos entre conjuntos.

Preprocesamiento de Datos:
Se realizan las siguientes operaciones tanto para el conjunto de entrenamiento como para el de prueba:
Se eliminan las columnas 'specie', 'type' y 'audio_name' para obtener las características (`X_train` y
`X_test`).
Se asigna la columna 'specie' como etiquetas (`y_train` y `y_test`).

Codificación de Etiquetas de Clase:

Se utiliza `LabelEncoder` para transformar las etiquetas de clase en números enteros, lo que es necesario
para que los algoritmos de machine learning puedan trabajar con ellas.

Minería de datos

Lucy Garay
Adriana Castillo
Balanceo de Clases mediante Sobremuestreo Aleatorio:
Se utiliza el método de sobremuestreo aleatorio para abordar el desequilibrio de clases en el conjunto de
datos de entrenamiento. Esto se hace para evitar que el modelo esté sesgado hacia las clases mayoritarias.

Modelo SVM (Support Vector Machine):


Se crea un clasificador de SVM con un kernel lineal y se entrena con los datos de entrenamiento
balanceados.
Se realiza la predicción en el conjunto de prueba y se calcula la precisión del modelo.

Modelo KNN (K-Nearest Neighbors):


Se crea un clasificador KNN con 5 vecinos y se entrena con los datos de entrenamiento balanceados.
Se realiza la predicción en el conjunto de prueba y se calcula la precisión del modelo.

Evaluación de Predicciones:
Se compara las etiquetas predichas por cada modelo con las etiquetas reales en el conjunto de prueba.
Se imprime una muestra aleatoria de las predicciones junto con las etiquetas reales para una inspección
visual.

Modelo Random Forest:

Entrenamiento del modelo Random Forest:


Se instancia un objeto de la clase RandomForestClassifier con 100 árboles (n_estimators=100) y una semilla
aleatoria fija (random_state=42).
Se entrena el modelo utilizando los datos de entrenamiento (X_train y y_train) mediante el método fit.

Predicciones:
Se utilizan los datos de prueba (X_test) para realizar predicciones utilizando el método predict del modelo
entrenado.

Evaluación del modelo:


Se calcula la precisión del modelo comparando las etiquetas predichas con las etiquetas reales del conjunto
de prueba utilizando la métrica de precisión (accuracy_score).
La precisión del modelo Random Forest se imprime en la consola.

Evaluación de Predicciones:
Se obtienen las etiquetas reales del conjunto de prueba y las etiquetas predichas por el modelo Random
Forest.
Se seleccionan 10 índices aleatorios del conjunto de prueba para visualizar resultados.
Se imprimen las etiquetas reales y las etiquetas predichas correspondientes a esos índices aleatorios para una
inspección visual.

Modelo Gradient Boosting:

Entrenamiento del modelo Gradient Boosting:


Se instancia un objeto de la clase GradientBoostingClassifier con 200 estimadores (n_estimators=200) y una
semilla aleatoria fija (random_state=42).
Se entrena el modelo utilizando los datos de entrenamiento (X_train y y_train) mediante el método fit.

Minería de datos

Lucy Garay
Adriana Castillo
Predicciones:
Se utilizan los datos de prueba (X_test) para realizar predicciones utilizando el método predict del modelo
entrenado.

Evaluación del modelo:


Se calcula la precisión del modelo comparando las etiquetas predichas con las etiquetas reales del conjunto
de prueba utilizando la métrica de precisión (accuracy_score).

Curvas ROC (Receiver Operating Characteristic):


Las curvas ROC muestran la relación entre la tasa de verdaderos positivos (TPR) y la tasa de falsos positivos
(FPR) para diferentes umbrales de clasificación.
Para cada modelo, se calcula una curva ROC para cada clase individualmente (One-vs-Rest). Cada curva
muestra cómo varía la sensibilidad (TPR) en función de la especificidad (1 - FPR) para un clasificador
binario que distingue entre esa clase específica y las demás clases agrupadas.
Las áreas bajo las curvas (AUC) ROC se utilizan como medida de la capacidad de discriminación del
modelo. Un AUC más cercano a 1 indica un mejor rendimiento del modelo.

Curvas de Precisión-Recall:
Las curvas de precisión-recall muestran cómo varía la precisión del modelo en función del recall (tasa de
verdaderos positivos) para diferentes umbrales de clasificación.
Estas curvas son especialmente útiles cuando hay desequilibrio de clases en los datos. Muestran cómo
cambia la precisión del modelo cuando se modifica la tasa de verdaderos positivos, lo que puede ser más
informativo que la curva ROC en tales casos.
Para cada modelo, se calcula una curva de precisión-recall para cada clase individualmente.

Modelo CNN 2D:

Definición y configuración del modelo:


Se crea un modelo secuencial (Sequential) utilizando la API funcional de Keras.
El modelo consta de varias capas convolucionales (Conv2D) seguidas de capas de max pooling
(MaxPooling2D) para reducir la dimensionalidad.
Las capas convolucionales aplican filtros 2D para extraer características espaciales del espectrograma.
Las activaciones ReLU se utilizan después de cada capa convolucional para introducir no linealidades.
Finalmente, se agregan capas densas (Dense) para la clasificación, con activación softmax en la capa de
salida para la clasificación de múltiples clases.

Entrenamiento del modelo:


El modelo se compila utilizando el optimizador Adam y la función de pérdida
sparse_categorical_crossentropy.
Se definen devoluciones de llamada para guardar el mejor modelo basado en la precisión en el conjunto de
validación (ModelCheckpoint) y para detener el entrenamiento si no hay mejora (EarlyStopping).
El modelo se entrena utilizando el método fit sobre los datos de espectrogramas y etiquetas codificadas, con
una división de validación del 20%.

Evaluación del modelo:


Se carga el mejor modelo guardado utilizando models.load_model.
El modelo se evalúa en el conjunto de prueba utilizando el método evaluate, que devuelve la pérdida y la
precisión en el conjunto de prueba.

Minería de datos

Lucy Garay
Adriana Castillo
Análisis del historial de entrenamiento:
Se recopilan las métricas de pérdida y precisión del historial de entrenamiento para graficar la pérdida y la
precisión en entrenamiento y validación a lo largo de las épocas.

Evaluación de predicciones:
Se realizan predicciones en el conjunto de prueba utilizando el modelo y se comparan con las etiquetas
reales.
Se muestra una muestra aleatoria de las etiquetas reales y predichas para análisis cualitativo.

Modelo CNN 1D:

Definición y configuración del modelo:


Similar al modelo CNN 2D, pero en este caso se utilizan capas convolucionales 2D (Conv2D) seguidas de
capas de max pooling 2D (MaxPooling2D).
Después de la última capa de max pooling, se agrega una capa de pooling global (GlobalAveragePooling2D)
para reducir la dimensionalidad a una salida 1D antes de conectarla a las capas densas.

Entrenamiento del modelo:


Se sigue el mismo proceso que en el modelo CNN 2D, con la compilación, definición de devoluciones de
llamada y entrenamiento.

Evaluación del modelo:


Similar al modelo CNN 2D, se carga el mejor modelo guardado y se evalúa en el conjunto de prueba.
Análisis del historial de entrenamiento y evaluación de predicciones:
Se realiza el mismo proceso que para el modelo CNN 2D.

Explicación de los resultados obtenidos.

Accuracy:
Modelo SVM: La precisión del modelo SVM es del 80.28%. Esto significa que el 80.28% de las
predicciones realizadas por el modelo coinciden con las etiquetas reales en el conjunto de prueba.
Modelo KNN: La precisión del modelo KNN es del 34.06%. Esto significa que el 34.06% de las
predicciones realizadas por el modelo KNN coinciden con las etiquetas reales en el conjunto de prueba.
F1-Score:
Modelo SVM: El F1-Score del modelo SVM es de 0.797. El F1-Score es una métrica que combina la
precisión y la exhaustividad de un modelo en una sola medida. Cuanto más cercano a 1 esté el F1-Score,
mejor será el rendimiento del modelo.
Modelo KNN: El F1-Score del modelo KNN es de 0.347. Este valor indica la precisión media del modelo,
teniendo en cuenta tanto los falsos positivos como los falsos negativos. Un valor alto indica un mejor
rendimiento del modelo.

Matriz de Confusión:
Se muestra la matriz de confusión para cada modelo. Esta matriz representa visualmente el rendimiento de
un algoritmo de clasificación. En la matriz de confusión, las filas representan las etiquetas reales y las

Minería de datos

Lucy Garay
Adriana Castillo
columnas representan las etiquetas predichas. Los elementos en la diagonal principal representan las
predicciones correctas, mientras que los elementos fuera de la diagonal principal representan errores de
clasificación.

Modelo Gradient Boosting:

Minería de datos

Lucy Garay
Adriana Castillo
Precisión (Accuracy): El modelo Gradient Boosting tiene una precisión del 79.00%. Esto indica que el
79.00% de las predicciones realizadas por el modelo coinciden con las etiquetas reales en el conjunto de
prueba.
F1-Score: El F1-Score del modelo Gradient Boosting es de 0.78. Este valor indica la precisión media del
modelo, teniendo en cuenta tanto los falsos positivos como los falsos negativos. Un valor alto indica un
mejor rendimiento del modelo.

Comparación con Random Forest:


Precisión (Accuracy): Se observa que el modelo Gradient Boosting tiene una precisión ligeramente mayor
que el modelo Random Forest (79.00% frente a 73.88%).
F1-Score: El F1-Score del modelo Gradient Boosting es también ligeramente superior al del modelo
Random Forest (0.78 frente a 0.71), lo que indica un mejor rendimiento en términos de precisión media.

Los resultados muestran que el modelo Gradient Boosting supera al modelo Random Forest en términos de
precisión y F1-Score, lo que indica que es más efectivo en la tarea de clasificación de datos de audio en este
conjunto de datos específico.

Matriz de Confusión: Al visualizar las matrices de confusión de ambos modelos, se puede observar cómo se
comparan sus aciertos y errores de clasificación en detalle.

Minería de datos

Lucy Garay
Adriana Castillo
Las curvas ROC y de precisión-recall proporcionan una evaluación detallada del rendimiento de los modelos
Random Forest y Gradient Boosting para cada clase de especie de aves.
Se pueden comparar las curvas para evaluar la capacidad de discriminación y la precisión de cada modelo en
la clasificación de cada clase.
Un AUC alto en las curvas ROC y una mayor área bajo las curvas de precisión-recall indican un mejor
rendimiento del modelo para esa clase específica.

Al visualizar estas curvas para cada modelo, se puede determinar cómo se desempeñan en términos de la
capacidad de discriminación y la precisión en la clasificación de las diferentes clases de especies de aves.

Minería de datos

Lucy Garay
Adriana Castillo
Minería de datos

Lucy Garay
Adriana Castillo
Minería de datos

Lucy Garay
Adriana Castillo
Modelo CNN 2D:

Precisión en el conjunto de prueba (accuracy): 0.169


Pérdida en el conjunto de prueba (loss): 0.640
F1 Score: 0.049

Reporte de clasificación: Este reporte proporciona precisiones, recalls y F1-scores para cada clase. Aquí se
muestra que el modelo tiene dificultades para predecir la mayoría de las clases, con puntuaciones cercanas a
cero para la mayoría de las clases.

Matriz de confusión: La matriz de confusión muestra cómo el modelo CNN 2D se confunde al predecir las
clases. La baja precisión y F1-score indican que el modelo no está aprendiendo efectivamente a distinguir
entre las diferentes clases.

Minería de datos

Lucy Garay
Adriana Castillo
Modelo CNN 1D:
Precisión en el conjunto de prueba (accuracy): 0.793
Pérdida en el conjunto de prueba (loss): No se proporciona
F1 Score: 0.788

Reporte de clasificación: En comparación con el modelo CNN 2D, el modelo CNN 1D muestra un
rendimiento significativamente mejor, con precisiones, recalls y F1-scores mucho más altos para la mayoría
de las clases.

Minería de datos

Lucy Garay
Adriana Castillo
Matriz de confusión: La matriz de confusión para el modelo CNN 1D debería mostrar una distribución más
equilibrada de predicciones correctas e incorrectas en comparación con el modelo CNN 2D.

Ambos modelos tienen un rendimiento notablemente diferente, con el modelo CNN 1D superando
significativamente al modelo CNN 2D en términos de precisión y F1-score. Esto sugiere que el modelo
CNN 1D es más efectivo para aprender características relevantes de los espectrogramas de audio y clasificar
las especies de aves con mayor precisión.

Las gráficas de distribución de clases predichas para ambos modelos pueden proporcionar una visualización
adicional del rendimiento de cada modelo al mostrar cómo se distribuyen las predicciones entre las
diferentes clases.

Minería de datos

Lucy Garay
Adriana Castillo
Conclusiones.

En conclusión, el modelo de red neuronal convolucional (CNN) 1D supera notablemente al modelo CNN 2D
en la tarea de clasificación de especies de aves a partir de espectrogramas de audio. El modelo CNN 1D
logra una precisión de alrededor del 79.3%, mientras que el modelo CNN 2D apenas alcanza una precisión
del 16.9%. Esto indica que el modelo CNN 1D es más efectivo para reconocer y distinguir entre las
diferentes especies de aves en comparación con el modelo 2D.
Además, al examinar métricas como el F1-score y el reporte de clasificación, se confirma la superioridad del
modelo CNN 1D, mostrando una capacidad más consistente y sólida de clasificación en todas las clases de
aves.
En resumen, el modelo CNN 1D demuestra ser la mejor opción para abordar esta tarea de clasificación de
especies de aves. Ofrece un rendimiento más confiable y preciso en la identificación de las aves a partir de
los espectrogramas de audio, lo que lo convierte en la opción preferida para este problema específico.

Minería de datos

Lucy Garay
Adriana Castillo

También podría gustarte