Puntuación de Prueba de Permutación para la Clasificación

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

En el aprendizaje automático, a menudo evaluamos el rendimiento de un modelo de clasificación utilizando una puntuación. Sin embargo, también necesitamos probar la significancia de la puntuación para asegurarnos de que el rendimiento del modelo no sea solo por casualidad. Aquí es donde la prueba de permutación de puntuación resulta útil. Genera una distribución nula calculando la precisión del clasificador en 1000 permutaciones diferentes del conjunto de datos. Luego, se calcula un valor p empírico como el porcentaje de permutaciones para las cuales la puntuación obtenida es mayor que la puntuación obtenida utilizando los datos originales. En este laboratorio, usaremos la función permutation_test_score de sklearn.model_selection para evaluar la significancia de una puntuación validada cruzada utilizando permutaciones.

Consejos sobre la VM

Una vez que se haya iniciado 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 cargarse. La validación de 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 comentarios después de la sesión y resolveremos rápidamente el problema para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49246{{"Puntuación de Prueba de Permutación para la Clasificación"}} sklearn/model_selection -.-> lab-49246{{"Puntuación de Prueba de Permutación para la Clasificación"}} sklearn/datasets -.-> lab-49246{{"Puntuación de Prueba de Permutación para la Clasificación"}} ml/sklearn -.-> lab-49246{{"Puntuación de Prueba de Permutación para la Clasificación"}} end

Cargar el conjunto de datos y generar características aleatorias

Usaremos el conjunto de datos iris, que consta de mediciones tomadas de 3 tipos de iris, y generaremos algunos datos de características aleatorias (es decir, 20 características), no correlacionadas con las etiquetas de clase en el conjunto de datos iris.

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
X = iris.data
y = iris.target

n_uncorrelated_features = 20
rng = np.random.RandomState(seed=0)
X_rand = rng.normal(size=(X.shape[0], n_uncorrelated_features))

Prueba de permutación de puntuación en los datos originales

A continuación, calculamos la permutación_test_score utilizando el conjunto de datos iris original y el clasificador SVC con la puntuación de exactitud para evaluar el modelo en cada ronda.

from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import permutation_test_score

clf = SVC(kernel="lineal", aleatorio_estado=7)
cv = StratifiedKFold(2, mezclar=True, aleatorio_estado=0)

puntuación_iris, puntuaciones_perm_iris, valor_p_iris = permutation_test_score(
    clf, X, y, puntuación="exactitud", cv=cv, n_permutaciones=1000
)

注:这里代码中的aleatorio_estado是对random_state不太准确的翻译,实际使用中建议保留random_state英文原文。

Prueba de permutación de puntuación en datos aleatorios

A continuación, calculamos la permutación_test_score utilizando las características generadas aleatoriamente y las etiquetas de iris, que no deben tener dependencia entre las características y las etiquetas.

score_rand, perm_scores_rand, pvalue_rand = permutation_test_score(
    clf, X_rand, y, scoring="accuracy", cv=cv, n_permutations=1000
)

Representar los resultados

Representamos un histograma de las puntuaciones de permutación (la distribución nula) tanto para el conjunto de datos iris original como para los datos aleatorizados. También indicamos la puntuación obtenida por el clasificador en los datos originales utilizando una línea roja. El valor p se muestra en cada gráfico.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

## Datos originales
ax.hist(perm_scores_iris, bins=20, densidad=True)
ax.axvline(score_iris, ls="--", color="r")
etiqueta_puntuación = f"Puntuación en datos originales:\n{score_iris:.2f}\n(p-valor: {pvalue_iris:.3f})"
ax.text(0.7, 10, etiqueta_puntuación, tamaño_fuente=12)
ax.set_xlabel("Puntuación de exactitud")
_ = ax.set_ylabel("Densidad de probabilidad")

plt.show()

fig, ax = plt.subplots()

## Datos aleatorios
ax.hist(perm_scores_rand, bins=20, densidad=True)
ax.set_xlim(0.13)
ax.axvline(score_rand, ls="--", color="r")
etiqueta_puntuación = f"Puntuación en datos originales:\n{score_rand:.2f}\n(p-valor: {pvalue_rand:.3f})"
ax.text(0.14, 7.5, etiqueta_puntuación, tamaño_fuente=12)
ax.set_xlabel("Puntuación de exactitud")
ax.set_ylabel("Densidad de probabilidad")

plt.show()

注:这里代码中的densidad是对density不太准确的翻译,实际使用中建议保留density英文原文;tamaño_fuente是对fontsize不太准确的翻译,实际使用中建议保留fontsize英文原文 。

Resumen

En este laboratorio, aprendimos cómo utilizar la función permutación_test_score de sklearn.model_selection para evaluar la significancia de una puntuación validada cruzada utilizando permutaciones. Generamos una distribución nula calculando la exactitud del clasificador en 1000 permutaciones diferentes del conjunto de datos, y calculamos un valor p empírico como el porcentaje de permutaciones para las cuales la puntuación obtenida es mayor que la puntuación obtenida utilizando los datos originales. También representamos los resultados para visualizar la distribución nula y la puntuación obtenida en los datos originales.