0% encontró este documento útil (0 votos)
7 vistas

KNN - Ipynb - Colab

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas

KNN - Ipynb - Colab

Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 2

load_breast_cancer es una función de scikit-learn que carga el Breast Cancer Wisconsin Dataset, un conjunto de datos clásico para la

clasificación binaria de tumores de mama (benignos o malignos).

Información del conjunto de datos:

Instancias (muestras): 569


Características (features): 30
Clases: 2 (benigno y maligno)
Objetivo (target): Clasificar si un tumor es benigno (0) o maligno (1).

Estructura de los datos:

Características (X): 30 variables numéricas que describen propiedades físicas de los tumores, organizadas en tres tipos:

Media de las medidas: Promedio de diversas propiedades.


Error estándar: Variabilidad de las propiedades.
Peor valor: Máximo valor observado de las propiedades.

Propiedades incluidas:

Radio
Textura
Perímetro
Área
Suavidad
Compacidad
Concavidad
Concavidades
Simetría
Dimensión fractal

1 import numpy as np
2 import matplotlib.pyplot as plt
3 import seaborn as sns
4 from sklearn.model_selection import train_test_split
5 from sklearn.datasets import load_breast_cancer
6 from sklearn.neighbors import KNeighborsClassifier
7 from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc

1 # Cargar el conjunto de datos de cáncer de mama


2 cancer = load_breast_cancer()
3 X = cancer.data
4 y = cancer.target

1 # Dividir el conjunto de datos en entrenamiento y prueba (hold-out del 70% para entrenamiento)
2 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=5)

1 # Crear el clasificador KNN especificando la métrica de distancia como euclidiana


2 knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
3
4 # Entrenar el clasificador
5 knn.fit(X_train, y_train)
6
7 # Realizar predicciones en el conjunto de prueba
8 y_pred = knn.predict(X_test)
9 y_pred_proba = knn.predict_proba(X_test)[:, 1] # Probabilidades para la clase positiva

1 # Calcular la matriz de confusión


2 conf_matrix = confusion_matrix(y_test, y_pred)
3 tn, fp, fn, tp = conf_matrix.ravel()
4
5 # Calcular métricas
6 accuracy = accuracy_score(y_test, y_pred)
7 error = 1 - accuracy
8 precision = precision_score(y_test, y_pred)
9 recall = recall_score(y_test, y_pred)
10 f1 = f1_score(y_test, y_pred)
11 especificidad = tn / (tn + fp)
12
13 # Calcular FPR, TPR y AUC para la curva ROC
14 fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
15 roc_auc = auc(fpr, tpr)

1 # Ploteo de la matriz de confusión


2 plt.figure(figsize=(4, 4))
3 sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="hot", xticklabels=cancer.target_names, yticklabels=cancer.target_names)
4 plt.ylabel('Actual')
5 plt.xlabel('Predicted')
6 plt.title('Matriz de Confusión')
7 plt.show()
1 # Ploteo de la curva ROC
2 plt.figure(figsize=(4, 4))
3 plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area=%0.2f)' % roc_auc)
4 plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
5 plt.xlim([0.0, 1.0])
6 plt.ylim([0.0, 1.05])
7 plt.xlabel('False Positive Rate')
8 plt.ylabel('True Positive Rate')
9 plt.title('Curva ROC')
10 plt.legend(loc="lower right")
11 plt.show()

1 # Imprimir las métricas


2 print("\033[1mMétricas del Modelo \n\n")
3 print(f"\033[1mExactitud:\033[0m {accuracy}\n")
4 print(f"\033[1mError:\033[0m {error}\n")
5 print(f"\033[1mPrecisión:\033[0m {precision}\n")
6 print(f"\033[1mSensibilidad (Recall):\033[0m {recall}\n")
7 print(f"\033[1mEspecificidad:\033[0m {especificidad}\n")
8 print(f"\033[1mF1 Score:\033[0m {f1}\n")

Métricas del Modelo

Exactitud: 0.9415204678362573

Error: 0.05847953216374269

Precisión: 0.9310344827586207

Sensibilidad (Recall): 0.9818181818181818

Especificidad: 0.8688524590163934

F1 Score: 0.9557522123893806

También podría gustarte