Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:iabd:pia:2eval:tema08.metricas_clasificacion [2025/02/19 12:20] admin [Ejercicios] |
clase:iabd:pia:2eval:tema08.metricas_clasificacion [2025/02/26 20:11] (actual) admin [Ejercicios] |
||
---|---|---|---|
Línea 359: | Línea 359: | ||
<sxh python> | <sxh python> | ||
metrics=[tf.keras.metrics.Recall()] | metrics=[tf.keras.metrics.Recall()] | ||
- | metrics=[" | + | metrics=[" |
</ | </ | ||
Línea 367: | Línea 367: | ||
history.history[' | history.history[' | ||
</ | </ | ||
+ | |||
+ | <note important> | ||
+ | En versiones antiguas de Tensorflow, se llamaba '' | ||
+ | </ | ||
Ejemplo: | Ejemplo: | ||
Línea 387: | Línea 391: | ||
<sxh python> | <sxh python> | ||
+ | |||
+ | from tensorflow.keras import backend as K | ||
+ | |||
def specificity(y_true, | def specificity(y_true, | ||
| | ||
Línea 445: | Línea 452: | ||
- | Entonces: | + | Y se puede calcular de 2 maneras distintas: |
- | * Ariméticamente | + | * Aritméticamente |
<sxh python> | <sxh python> | ||
Línea 726: | Línea 733: | ||
{{: | {{: | ||
- | ¿Qué valor de umbral dejarías? Elige uno que no sea '' | ||
<note important> | <note important> | ||
Línea 734: | Línea 740: | ||
==== Ejercicio 5.B ==== | ==== Ejercicio 5.B ==== | ||
- | Vuelve a mostrar la matriz | + | Muestra varias matrices |
+ | {{: | ||
+ | |||
+ | |||
+ | ¿Que es mejor una alta precisión alta (VPP) o un alto VPN? Elije el umbral | ||
<note important> | <note important> | ||
Usa los datos de **test** para obtener las métricas. | Usa los datos de **test** para obtener las métricas. | ||
</ | </ | ||
+ | |||
+ | ==== Ejercicio 5.C ==== | ||
+ | Ahora calcula una tabla similar a esta para ver resultado de 8 pacientes. | ||
+ | |||
+ | <sxh python> | ||
+ | Paciente | ||
+ | | ||
+ | ---------- | ||
+ | Nº 347 0.32628 | ||
+ | Nº 270 0.95804 | ||
+ | Nº 213 0.958995 | ||
+ | Nº 3 0.31489 | ||
+ | Nº 214 0.286227 | ||
+ | Nº 265 0 | ||
+ | Nº 92 | ||
+ | Nº 476 0.275804 | ||
+ | </ | ||
+ | |||
+ | Responde ahora a estas preguntas: | ||
+ | * ¿Que tiene de extraño el valor de algunos resultados? | ||
+ | * ¿Es útil el '' | ||
+ | * Porque $P(Enfermo|Positivo)=VPP=Precisión$ es siempre la misma? | ||
+ | * Porque $P(Sano|Negativo)=VPN$ es siempre la misma? | ||
+ | |||
+ | Para saber con que pacientes debe probar concretamente en tu modelo, usa la función '' | ||
+ | |||
+ | <sxh python> | ||
+ | def get_paciente_a_probar(indices, | ||
+ | y_pred_values = y_pred[indices] | ||
+ | sorted_indices = indices[0][np.argsort(order*y_pred_values)] | ||
+ | |||
+ | return sorted_indices[0] | ||
+ | |||
+ | def get_pacientes_a_probar(model): | ||
+ | breast_cancer=load_breast_cancer() | ||
+ | tolerancia=0.07 | ||
+ | desc=-1 | ||
+ | asc=1 | ||
+ | numeros_pacientes=[] | ||
+ | |||
+ | y_pred=model.predict(breast_cancer.data, | ||
+ | |||
+ | #TP Malo: | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==1) & (y_pred> | ||
+ | #TP Bueno | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==1) & (y_pred> | ||
+ | |||
+ | #FP Malo | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==0) & (y_pred> | ||
+ | #FP Casi bueno | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==0) & (y_pred> | ||
+ | |||
+ | #TN Malo | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==0) & (y_pred> | ||
+ | #TN Bueno | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==0) & (y_pred> | ||
+ | |||
+ | #FN Malo | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==1) & (y_pred> | ||
+ | #FN Casi bueno | ||
+ | numeros_pacientes.append(get_paciente_a_probar(np.where((breast_cancer.target==1) & (y_pred> | ||
+ | |||
+ | return numeros_pacientes | ||
+ | </ | ||
==== Ejercicio 6 ==== | ==== Ejercicio 6 ==== | ||
- | Indica en los siguientes problemas si subirías | + | Indica en los siguientes problemas si es mejor una precisión alta (VPP) o un alto VPN |
* Una IA que detecta si hay petroleo en el subsuelo | * Una IA que detecta si hay petroleo en el subsuelo | ||
Línea 747: | Línea 821: | ||
* Una IA que decide si te concede un préstamo | * Una IA que decide si te concede un préstamo | ||
* Una IA que decide una persona en un juicio es inocente | * Una IA que decide una persona en un juicio es inocente | ||
- | * Una IA que corrige automáticamente un examen y te dice si has aprobado | + | * Una IA que corrige automáticamente un examen y dice si se ha aprobado |
- | |||
- | ==== Ejercicio 7 ==== | ||
- | Haz ahora un pequeño programa en modo texto en python en el que: | ||
- | * Se pregunte al usuario los datos del "// | ||
- | * Para facilitar la entrada que ponga valores por defecto para cada //x// y que indique el rango que tenemos en los posibles valores. | ||
- | * La prevalencia. Si la deja en blanco serán las de los datos | ||
- | * Que indique si tiene o no cáncer. | ||
- | * Si tiene cáncer que indique al usuario la probabilidad de que esta IA haya acertado (VPP) | ||
- | * Si no tiene cáncer que indique al usuario la probabilidad de que esta IA haya acertado (VPN) | ||
- | |||
- | <note important> | ||
- | Ahora hazte las siguientes preguntas | ||
- | * ¿Deberíamos haber preguntado al usuario el umbral? | ||
- | * ¿Deberíamos mostrar al usuario el '' | ||
- | </ | ||