[Proyecto práctico] Python implementa el modelo de clasificación RNN-LSTM de red neuronal profunda (diagnóstico de enfermedades médicas)

Nota: Este es un proyecto práctico de aprendizaje automático (con datos + código + video + documentos ). Si necesita datos + código completo, puede ir directamente al final del artículo.

1.Antecedentes del proyecto

       Con la continua profundización de Internet+, hemos entrado en la era de la inteligencia artificial. Como rama de la inteligencia artificial, el aprendizaje automático se utiliza cada vez más en todos los ámbitos de la vida y también se ha aplicado cada vez más en las pruebas médicas clínicas. . Basado en la creciente cantidad de datos de pruebas en medicina clínica, construir un modelo de aprendizaje automático para hacer predicciones más inteligentes se ha convertido en la misión de la era actual. Este modelo también se basa en algunos datos históricos de enfermedades para modelado y predicción.

2. Recopilar datos

Estos datos son datos simulados y se dividen en dos partes de datos:

Conjunto de datos de entrenamiento: data.csv

Conjunto de datos de prueba: test.csv

En aplicaciones reales, puedes simplemente reemplazarlo según tus propios datos.

特征数据: edad, género, índice de masa corporal, hipertensión por insuficiencia cardíaca, enfermedad pulmonar obstructiva crónica, enfermedad hepática crónica, …… fármaco tóxico renal        

Datos de la etiqueta: enfermedad_renal_aguda

3. Preprocesamiento de datos

1) Descripción de los datos originales :

2) Integridad de los datos y vista del tipo de datos:

3) Número de valores faltantes en los datos:

  

Puede ver que no faltan valores en los datos.

4. Análisis de datos exploratorios

1) Mostrar la distribución de las características de edad:

2) Mostrar la distribución de las características de género:

3) Mostrar la distribución de las características de heart_failure:

Las características restantes las puede analizar usted mismo.

4) Análisis de correlación

  

Nota: Un valor positivo indica una correlación positiva y un valor negativo indica una correlación negativa. Cuanto mayor sea el valor, más fuerte será la correlación entre las variables.

5. Ingeniería de funciones

1) Los datos de características y los datos de etiquetas se dividen, la enfermedad_del_riñón_aguda son datos de la etiqueta y los datos distintos de la enfermedad_del_riñón_aguda son datos de características;

2) División del conjunto de datos, dividido en conjunto de entrenamiento y conjunto de prueba

El conjunto de datos se ha dividido de antemano y se puede leer directamente.

6.Modelado LSTM  

1) Una breve introducción a la red neuronal LSTM:

La red LSTM es una variante de RNN y actualmente es una estructura de red neuronal recurrente más común. Todo el proceso es memoria larga a corto plazo, que se traduce al chino como una red de "memoria larga y corta". Al leer, debe haber una pequeña pausa después de "largo", y no lo lea como una red de memoria "larga o corta", porque en ese caso, no sabrá si la memoria es larga o corta. En esencia, sigue siendo una red de memoria corta, pero utiliza un determinado método para extender la "memoria corta" tanto como sea posible.

En resumen, LSTM es una red neuronal recurrente que lleva una pista de memoria, que es una mejora realizada especialmente para resolver el problema de la desaparición del gradiente. La pista de memoria que agrega es una forma de transportar información a través de múltiples pasos de tiempo. Primero puede imaginar que hay una cinta transportadora paralela al proceso de procesamiento de series de tiempo. La información en la secuencia puede "saltar" sobre la cinta transportadora en cualquier posición y luego transmitirse a un paso de tiempo posterior y "saltar" sin cambios cuando sea necesario. , aceptar procesamiento. Este es el principio de LSTM: al igual que la memoria en el cerebro, la información se guarda para su uso posterior. Cuando recordamos el pasado, la información anterior nos viene a la mente nuevamente y no desaparecerá sin dejar rastro con el paso del tiempo.

Esta idea es muy similar a la conexión residual, la diferencia es que la conexión residual resuelve el problema de la desaparición del gradiente entre capas, mientras que LSTM resuelve el problema de la desaparición de mensajes durante el procesamiento del bucle dentro de la capa de bucle y la capa de neuronas.

En pocas palabras, la pista C transportará información a través de pasos de tiempo. Su valor en diferentes pasos de tiempo es Ct. Esta información se operará con la conexión de entrada y la conexión de bucle (es decir, el producto escalar con la matriz de peso, luego se agregará un sesgo y se agregará un proceso de activación), lo que afectará la transmisión al siguiente El estado de un paso de tiempo se muestra en la figura de la derecha.

LSTM: agrega una pista de memoria que transporta información al principio de la secuencia

2) Establecer un modelo de clasificación LSTM con los siguientes parámetros de modelo:

número de serie

parámetro

1

pérdida = 'binary_crossentropy'

2

optimizador = 'adam'

3

métricas=['acc']

Otros parámetros se establecen en función de datos específicos.

3) Estructura y resumen de la red neuronal.

Diagrama de estructura de la red neuronal:

Resumen de la red neuronal:

Puedes ver el tipo, forma y parámetros de cada capa de la red.

7. Evaluación del modelo

1) Los indicadores de evaluación utilizan principalmente tasa de precisión, tasa de recuperación, F1

número de serie

Nombre del indicador de evaluación

Valor del indicador de evaluación

1

precisión

98,74%

2

tasa de recuperación

100.00%

3

F1

99,37%

Como puede verse en la tabla anterior, este modelo funciona bien.

2) Gráfico de pérdida y precisión

 loss = history.history['loss']
    val_loss = history.history['val_loss']
    epochs = range(1, len(loss) + 1)
    plt.figure(figsize=(12, 4))
    plt.subplot(1, 2, 1)
    plt.plot(epochs, loss, 'r', label='Training loss')
    plt.plot(epochs, val_loss, 'b', label='Test loss')
    plt.title('Training and Test loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    acc = history.history['acc']
    val_acc = history.history['val_acc']
    plt.subplot(1, 2, 2)
    plt.plot(epochs, acc, 'r', label='Training acc')
    plt.plot(epochs, val_acc, 'b', label='Test acc')
    plt.title('Training and Test accuracy')
    plt.xlabel('Epochs')
    plt.ylabel('Accuracy')
    plt.legend()

3) dibujo de la curva ROC

Curva ROC del conjunto de entrenamiento:

fpr, tpr, threshold = roc_curve(y_data, y_score)

    roc_auc = auc(fpr, tpr)

    plt.figure()
    lw = 2
    plt.plot(fpr, tpr, color='darkorange',
             lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title(title + ' RNN-LSTM Model ')
    plt.legend(loc="lower right")

Curva ROC del conjunto de prueba:

8. Aplicación clínica

Con base en los datos característicos del conjunto de pruebas, predecir si estos pacientes tendrán enfermedades relacionadas; con base en los resultados de la predicción: prevenir personas que puedan sufrir tales enfermedades en el futuro.

Los resultados previstos son los siguientes:

 

features = ['age']
fig = plt.subplots(figsize=(15, 15))
for i, j in enumerate(features):
    plt.subplots_adjust(hspace=1.0)
    sns.countplot(x=j, data=data_train)
    plt.title("No. of age")

# 本次机器学习项目实战所需的资料,项目资源如下:

# 链接:https://pan.baidu.com/s/1dW3S1a6KGdUHK90W-lmA4w 
# 提取码:bcbp

fig = plt.subplots(figsize=(15, 15))
for i, j in enumerate(features):
    plt.subplots_adjust(hspace=1.0)
    sns.countplot(x=j, data=data_train)
    plt.title("No. of gender")

Supongo que te gusta

Origin blog.csdn.net/weixin_42163563/article/details/119767919#comments_28565663
Recomendado
Clasificación