Buenas, estoy bastante atascado , debo utilizar KMeans en un problema supervisado, utilizando este dataset.
La columna de destino es la última que es 'DEATH_EVENT', he separado esta última, para calcular el número de aciertos y errores. El resultado es bastante malo, creo que debería eliminar algunas columnas o crear un bucle que las elimine.
Os pongo el código:
El problema es que no se como realizar un bucle como:
mejor_solucion = 0
mejor_kmeans = 0
si aciertos > mejor_solucion
mejor_kmeans = nuevo_kmeans
Tengo la mitad del problema resuelto pero me pide que pasaría si quito una o varias columnas, por si puedes mejorar los resultados.
La columna de destino es la última que es 'DEATH_EVENT', he separado esta última, para calcular el número de aciertos y errores. El resultado es bastante malo, creo que debería eliminar algunas columnas o crear un bucle que las elimine.
Os pongo el código:
Python:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
X = np.genfromtxt('heart_failure_clinical_records_dataset.csv', delimiter=',')
#Contiene nombre columnas
X = np.delete(X, 0, 0)
train, test = train_test_split(X, test_size=0.33, shuffle=True, random_state=100)
X_train = np.delete(train, -1, axis =1)
y_train = train[:, -1]
X_test = test[:, :-1]
y_test = test[:, -1]
K = 2
kmeans = KMeans(n_clusters=K)
kmeans.fit(X_train)
pred = kmeans.predict(X_test)
n_items = len(pred)
aciertos = 0
for i in range(0, n_items):
aciertos += 1 if (pred[i] == y_test[i]) else 0
print("Acertado: %6.5f, fallos %6.5f" % (aciertos/n_items, (n_items-aciertos)/n_items))
#matriz de confusion
cm = confusion_matrix(y_test, pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
disp.plot()
plt.show()
#Salida del resultado
Acertado: 0.59596, fallos: 0.40404
mejor_solucion = 0
mejor_kmeans = 0
si aciertos > mejor_solucion
mejor_kmeans = nuevo_kmeans
Tengo la mitad del problema resuelto pero me pide que pasaría si quito una o varias columnas, por si puedes mejorar los resultados.
Última edición: