Importancia de permutación en el conjunto de datos de cáncer de mama

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica demuestra cómo utilizar la importancia de permutación en el conjunto de datos de cáncer de mama de Wisconsin utilizando la función permutación_importancia de sklearn.inspección. El clasificador de bosque aleatorio se utiliza para clasificar los datos y calcular su precisión en un conjunto de prueba. También mostraremos cómo manejar la multicolinealidad en las características utilizando el clustering jerárquico.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos el problema para usted de inmediato.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49244{{"Importancia de permutación en el conjunto de datos de cáncer de mama"}} end

Entrenar un clasificador de bosque aleatorio

Primero cargamos el conjunto de datos de cáncer de mama de Wisconsin y lo dividimos en conjuntos de entrenamiento y prueba. Luego entrenamos un clasificador de bosque aleatorio en el conjunto de entrenamiento y evaluamos su precisión en el conjunto de prueba.

data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
print("Precisión en los datos de prueba: {:.2f}".format(clf.score(X_test, y_test)))

Graficar la importancia de las características

Graficamos la importancia de las características basada en árboles y la importancia de permutación. La gráfica de importancia de permutación muestra que la permutación de una característica reduce la precisión como máximo en 0.012, lo que sugeriría que ninguna de las características es importante. Esto está en contradicción con la alta precisión en la prueba calculada anteriormente: algunas características deben ser importantes. La importancia de permutación se calcula en el conjunto de entrenamiento para mostrar en qué medida el modelo depende de cada característica durante el entrenamiento.

result = permutation_importance(clf, X_train, y_train, n_repeats=10, random_state=42)
perm_sorted_idx = result.importances_mean.argsort()

tree_importance_sorted_idx = np.argsort(clf.feature_importances_)
tree_indices = np.arange(0, len(clf.feature_importances_)) + 0.5

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))
ax1.barh(tree_indices, clf.feature_importances_[tree_importance_sorted_idx], height=0.7)
ax1.set_yticks(tree_indices)
ax1.set_yticklabels(data.feature_names[tree_importance_sorted_idx])
ax1.set_ylim((0, len(clf.feature_importances_)))
ax2.boxplot(
    result.importances[perm_sorted_idx].T,
    vert=False,
    labels=data.feature_names[perm_sorted_idx],
)
fig.tight_layout()
plt.show()

Manejar características multicolineales

Cuando las características son colineales, la permutación de una característica tendrá poco efecto en el rendimiento del modelo porque puede obtener la misma información de una característica correlacionada. Una forma de manejar las características multicolineales es realizando un clustering jerárquico en las correlaciones de rango de Spearman, elegir un umbral y mantener una sola característica de cada cluster. Primero, graficamos un mapa de calor de las características correlacionadas.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))
corr = spearmanr(X).correlation

## Asegurarse de que la matriz de correlación sea simétrica
corr = (corr + corr.T) / 2
np.fill_diagonal(corr, 1)

## Convertimos la matriz de correlación a una matriz de distancias antes de realizar
## el clustering jerárquico utilizando el enlace de Ward.
distance_matrix = 1 - np.abs(corr)
dist_linkage = hierarchy.ward(squareform(distance_matrix))
dendro = hierarchy.dendrogram(
    dist_linkage, labels=data.feature_names.tolist(), ax=ax1, leaf_rotation=90
)
dendro_idx = np.arange(0, len(dendro["ivl"]))

ax2.imshow(corr[dendro["leaves"], :][:, dendro["leaves"]])
ax2.set_xticks(dendro_idx)
ax2.set_yticks(dendro_idx)
ax2.set_xticklabels(dendro["ivl"], rotation="vertical")
ax2.set_yticklabels(dendro["ivl"])
fig.tight_layout()
plt.show()

Elegir un umbral para agrupar las características en clusters

Elegimos manualmente un umbral mediante la inspección visual del dendrograma para agrupar nuestras características en clusters y elegir una característica de cada cluster para mantener, seleccionar esas características de nuestro conjunto de datos y entrenar un nuevo bosque aleatorio. La precisión en la prueba del nuevo bosque aleatorio no cambió mucho en comparación con el bosque aleatorio entrenado en el conjunto de datos completo.

cluster_ids = hierarchy.fcluster(dist_linkage, 1, criterion="distance")
cluster_id_to_feature_ids = defaultdict(list)
for idx, cluster_id in enumerate(cluster_ids):
    cluster_id_to_feature_ids[cluster_id].append(idx)
selected_features = [v[0] for v in cluster_id_to_feature_ids.values()]

X_train_sel = X_train[:, selected_features]
X_test_sel = X_test[:, selected_features]

clf_sel = RandomForestClassifier(n_estimators=100, random_state=42)
clf_sel.fit(X_train_sel, y_train)
print(
    "Precisión en los datos de prueba con características eliminadas: {:.2f}".format(
        clf_sel.score(X_test_sel, y_test)
    )
)

Resumen

Esta práctica demostró cómo utilizar la importancia de permutación para calcular la importancia de las características en el conjunto de datos de cáncer de mama de Wisconsin utilizando un clasificador de bosque aleatorio. Mostramos cómo manejar las características multicolineales utilizando el clustering jerárquico.