Clasificadores Semi-Supervisados en el Conjunto de Datos Iris

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 este laboratorio, exploraremos clasificadores semi-supervisados en el conjunto de datos Iris. Compararemos los límites de decisión generados por Label Spreading, Auto-entrenamiento y Máquina de Vectores de Soporte (SVM) en el conjunto de datos Iris. Usaremos scikit-learn, una popular biblioteca de aprendizaje automático de Python, para implementar los clasificadores y visualizar los límites de decisión.

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 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 sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/semi_supervised("Semi-Supervised Learning") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49282{{"Clasificadores Semi-Supervisados en el Conjunto de Datos Iris"}} sklearn/semi_supervised -.-> lab-49282{{"Clasificadores Semi-Supervisados en el Conjunto de Datos Iris"}} ml/sklearn -.-> lab-49282{{"Clasificadores Semi-Supervisados en el Conjunto de Datos Iris"}} end

Cargar el conjunto de datos Iris y dividir los datos

Cargaremos el conjunto de datos Iris, que es un conjunto de datos ampliamente utilizado en el aprendizaje automático para tareas de clasificación. El conjunto de datos contiene 150 muestras de flores de Iris, con cuatro características para cada muestra: longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo. Dividiremos el conjunto de datos en características de entrada y etiquetas de destino.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

## Cargar el conjunto de datos Iris
iris = datasets.load_iris()

## Dividir el conjunto de datos en características de entrada y etiquetas de destino
X = iris.data[:, :2] ## Solo usaremos las dos primeras características para fines de visualización
y = iris.target

Configurar los clasificadores de Label Spreading

Configuraremos tres clasificadores de Label Spreading con diferentes porcentajes de datos etiquetados: 30%, 50% y 100%. Label Spreading es un algoritmo de aprendizaje semi-supervisado que propaga las etiquetas de los puntos de datos etiquetados a los no etiquetados basado en la similitud entre ellos.

from sklearn.semi_supervised import LabelSpreading

## Configurar los clasificadores de Label Spreading
rng = np.random.RandomState(0)
y_rand = rng.rand(y.shape[0])
y_30 = np.copy(y)
y_30[y_rand < 0.3] = -1  ## establecer muestras aleatorias como no etiquetadas
y_50 = np.copy(y)
y_50[y_rand < 0.5] = -1
ls30 = (LabelSpreading().fit(X, y_30), y_30, "Label Spreading 30% data")
ls50 = (LabelSpreading().fit(X, y_50), y_50, "Label Spreading 50% data")
ls100 = (LabelSpreading().fit(X, y), y, "Label Spreading 100% data")

Configurar los clasificadores de Auto-entrenamiento

Configuraremos dos clasificadores de Auto-entrenamiento con diferentes porcentajes de datos etiquetados: 30% y 50%. El Auto-entrenamiento es un algoritmo de aprendizaje semi-supervisado que entrena un clasificador con los datos etiquetados y luego lo utiliza para predecir las etiquetas de los datos no etiquetados. Las predicciones más confiables se agregan a los datos etiquetados y el proceso se repite hasta la convergencia.

from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.svm import SVC

## Configurar los clasificadores de Auto-entrenamiento
base_classifier = SVC(kernel="rbf", gamma=0.5, probability=True)
st30 = (
    SelfTrainingClassifier(base_classifier).fit(X, y_30),
    y_30,
    "Auto-entrenamiento 30% data",
)
st50 = (
    SelfTrainingClassifier(base_classifier).fit(X, y_50),
    y_50,
    "Auto-entrenamiento 50% data",
)

Configurar el clasificador de SVM

Configuraremos un clasificador de SVM con un kernel de función radial de base (RBF). El SVM es un algoritmo de aprendizaje supervisado que encuentra el hiperplano óptimo que separa los datos en diferentes clases.

from sklearn.svm import SVC

## Configurar el clasificador de SVM
rbf_svc = (SVC(kernel="rbf", gamma=0.5).fit(X, y), y, "SVC with rbf kernel")

Visualizar los límites de decisión

Crearemos una malla de puntos que cubra el espacio de características de entrada y usaremos cada clasificador para predecir las etiquetas de los puntos en la malla. Luego graficaremos los límites de decisión y los puntos de datos etiquetados.

## Create a mesh grid to plot in
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

## Define a color map for the labels
color_map = {-1: (1, 1, 1), 0: (0, 0, 0.9), 1: (1, 0, 0), 2: (0.8, 0.6, 0)}

## Set up the classifiers
classifiers = (ls30, st30, ls50, st50, ls100, rbf_svc)

## Plot the decision boundaries and labeled data points for each classifier
for i, (clf, y_train, title) in enumerate(classifiers):
    ## Plot the decision boundary
    plt.subplot(3, 2, i + 1)
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    ## Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
    plt.axis("off")

    ## Plot the labeled data points
    colors = [color_map[y] for y in y_train]
    plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors="black")

    plt.title(title)

plt.suptitle("Unlabeled points are colored white", y=0.1)
plt.show()

Resumen

En este laboratorio, exploramos clasificadores semi-supervisados en el conjunto de datos Iris. Comparamos los límites de decisión generados por Label Spreading, Auto-entrenamiento y SVM en el conjunto de datos Iris. Utilizamos scikit-learn para implementar los clasificadores y visualizar los límites de decisión. Encontramos que Label Spreading y Auto-entrenamiento pueden aprender buenos límites de decisión incluso cuando solo hay una cantidad pequeña de datos etiquetados disponibles.