• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Selección del valor óptimo de K en SelecKBest de scikit-learn

febrero 23, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

Para poder entrenar un modelo de aprendizaje automático de forma correcta es necesario seleccionar las características. Un proceso clave para mejorar el rendimiento de los modelos. En Python, uno de los posibles métodos para ello es SelectKBest (o su equivalente SelectPercentile). Una de las herramientas de selección de características que se encuentran disponibles en la
biblioteca scikit-learn de Python. En esta entrada, se explicará este se explicará el funcionamiento de la herramienta y como se puede seleccionar el valor óptimo de K en el método SelecKBest.

Tabla de contenidos

  • 1 ¿Qué es SelectKBest y para qué se utiliza?
  • 2 Cómo seleccionar el valor óptimo de K en SelectKBest
    • 2.1 Paso 1: Obtener el conjunto de datos
    • 2.2 Paso 2: División del conjunto de datos
    • 2.3 Paso 3: Evaluación del rendimiento del modelo para diferentes valores de K
    • 2.4 Paso 4: Representación gráfica del rendimiento del modelo frente a K
    • 2.5 Paso 5: Identificación del valor óptimo de K
    • 2.6 Conclusiones
    • 2.7 Código completo usado en la publicación

¿Qué es SelectKBest y para qué se utiliza?

SelectKBest es una clase con la que se puede seleccionar las mejores características de un conjunto de datos para usar en el entrenamiento de modelos de aprendizaje supervisado. Para lo que mide como predice cada una por sí sola la variable objetivo. Para ello se le debe indicar una métrica de rendimiento con la que asigna una puntuación a cada una de las características del conjunto de datos. Una vez obtenida la puntuación selecciona únicamente la K mejores del conjunto de datos. Así, para poder usar esta clase, es necesario seleccionar dos hiperparámetros: la función de métrica y el valor de K. La función se selecciona en función del problema, por ejemplo, f_classif para problemas de clasificación y f_regression para problemas de regresión. Por otro lado, la elección de K puede ser más difícil.

Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
En Analytics Lane
Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas

El método SelectKBest se utiliza principalmente para reducir la dimensionalidad de los datos, lo que puede mejorar el rendimiento del modelo al eliminar características irrelevantes, reducir el sobreajuste y reducir el tiempo de entrenamiento.

En scikit-learn, además de SelectKBest también se puede usar la clase SelectPercentile. A la que se le debe indicar el porcentaje de caracterizas a seleccionar en lugar del número, aunque el resto del funcionamiento es exactamente el mismo.

Publicidad


Cómo seleccionar el valor óptimo de K en SelectKBest

Una de las preguntas clave cuando se crea un modelo es cuál es el valor óptimo de K en SelecKBest, es decir, cuántas características deben seleccionarse. Algo que se puede resolver con una curva de validación. Para ello, simplemente se representa el rendimiento del modelo frente a K en un conjunto de datos de entrenamiento y otro de validación para identificar el valor de K óptimo.

Las curvas de validación son un enfoque visual con el que se puede determinar el valor óptimo de K en SelecKBest. Un método que se puede resumir en los siguientes pasos.

Paso 1: Obtener el conjunto de datos

A modo de ejemplos se va a usar un conjunto de datos sintéticos. Para ello se puede utilizar la función make_regression() de scikit-learn, una función diseñada para generar conjuntos de datos sintéticos que simula un problema de regresión. El resultado es un conjunto de datos donde algunas de las características son relevantes para predecir la variable objetivo y otras son irrelevantes o redundantes. Permitiendo de este modo simular un escenario realista donde se requiere la selección de características. Para ello se va a usar el siguiente código.

from sklearn.datasets import make_regression

# Crear un conjunto de datos sintéticos
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

En este ejemplo, para garantizar que los valores son reproducibles, se usa el número 42 como semilla.

Publicidad


Paso 2: División del conjunto de datos

El conjunto de datos se divide en un conjunto de entrenamiento y un conjunto de pruebas. En scikit-learn, la función con la que se puede realizar esta tarea es train_test_split(). Como es habitual, el conjunto de entrenamiento se utiliza para ajustar el modelo y seleccionar las características, mientras que el conjunto de prueba se reserva para evaluar el rendimiento del modelo de forma independiente.

from sklearn.model_selection import train_test_split

# Dividir los datos en conjunto de entrenamiento y conjunto de prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Paso 3: Evaluación del rendimiento del modelo para diferentes valores de K

Ahora, una vez divididos los datos, para cada valor de K en un rango predefinido, se aplica la clase SelectKBest para seleccionar las características más relevantes del conjunto de entrenamiento. Para entrenar un modelo utilizando solamente las características seleccionadas. Finalmente, se evalúa su rendimiento tanto en el conjunto de entrenamiento como en el conjunto de prueba.

from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression

# Definir una lista de posibles valores de K
k_values = range(1, 21)

# Inicializar listas para almacenar los resultados de rendimiento
train_scores = []
test_scores = []

# Evaluar el rendimiento del modelo para cada valor de K
for k in k_values:
    # Seleccionar características utilizando SelectKBest
    selector = SelectKBest(score_func=f_regression, k=k)
    X_train_selected = selector.fit_transform(X_train, y_train)
    
    # Entrenar un modelo de regresión lineal
    model = LinearRegression()
    model.fit(X_train_selected, y_train)
    
    # Evaluar el rendimiento en el conjunto de entrenamiento
    train_score = model.score(X_train_selected, y_train)
    train_scores.append(train_score)
    
    # Evaluar el rendimiento en el conjunto de prueba
    X_test_selected = selector.transform(X_test)
    test_score = model.score(X_test_selected, y_test)
    test_scores.append(test_score)

Nótese que en el ejemplo se ha usado f_regression a la hora de crear la clase con SelectKBest, esto es porque el problema es de regresión. Para otros problemas se debe cambiar la función por la más adecuada.

Publicidad


Paso 4: Representación gráfica del rendimiento del modelo frente a K

Una vez entrenados todos los modelos, los resultados de rendimiento para diferentes valores de K se deben representan gráficamente. En los problemas de regresión, por lo general, se traza el rendimiento del modelo usando el R2 en el eje y frente al número de características seleccionadas (K) en el eje x. Para problemas de clasificación se puede usar la precisión. Esto permite visualizar cómo cambia el rendimiento del modelo a medida que se varía el número de características seleccionadas.

import matplotlib.pyplot as plt

# Visualizar los resultados
plt.plot(k_values, train_scores, label='Train Score')
plt.plot(k_values, test_scores, label='Test Score')
plt.xlabel('Número de características seleccionadas (K)')
plt.ylabel('R2 Score')
plt.title('Rendimiento del modelo frente a K')
plt.legend()
plt.show()

Paso 5: Identificación del valor óptimo de K

En esta gráfica, se debe buscar el punto donde el rendimiento del modelo en el conjunto de prueba alcance un máximo o se estabilice. Lo que indica el valor óptimo de K en SelecKBest. En otras palabras, el número de características que proporciona el mejor equilibrio entre la complejidad del modelo y su capacidad para generalizar a nuevos datos.

Rendimiento del modelo frente al número de características seleccionadas
Rendimiento del modelo en los conjuntos de dato de entrenamiento y en función del valor de K usado en SelecKBest

En el ejemplo, parece que esto sucede en torno a 7 características.

Publicidad


Conclusiones

Seleccionar el valor óptimo de K en SelecKBest de scikit-learn es crucial para obtener el mejor rendimiento de los modelos y evitar el sobreajuste. En este artículo, se ha analizado cómo realizar esta selección usan para ello curvas de validación. Un enfoque sencillo con el que se puede mejorar la calidad de los modelos de aprendizaje automático.

Código completo usado en la publicación

A continuación, se muestra el código completo que se ha utilizado en esta entrada.

# Importar bibliotecas necesarias
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Crear un conjunto de datos sintéticos
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

# Dividir los datos en conjunto de entrenamiento y conjunto de prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# Definir una lista de posibles valores de K
k_values = range(1, 21)

# Inicializar listas para almacenar los resultados de rendimiento
train_scores = []
test_scores = []

# Evaluar el rendimiento del modelo para cada valor de K
for k in k_values:
    # Seleccionar características utilizando SelectKBest
    selector = SelectKBest(score_func=f_regression, k=k)
    X_train_selected = selector.fit_transform(X_train, y_train)
    
    # Entrenar un modelo de regresión lineal
    model = LinearRegression()
    model.fit(X_train_selected, y_train)
    
    # Evaluar el rendimiento en el conjunto de entrenamiento
    train_score = model.score(X_train_selected, y_train)
    train_scores.append(train_score)
    
    # Evaluar el rendimiento en el conjunto de prueba
    X_test_selected = selector.transform(X_test)
    test_score = model.score(X_test_selected, y_test)
    test_scores.append(test_score)
    
    
# Visualizar los resultados
plt.plot(k_values, train_scores, label='Train Score')
plt.plot(k_values, test_scores, label='Test Score')
plt.xlabel('Número de características seleccionadas (K)')
plt.ylabel('R2 Score')
plt.title('Rendimiento del modelo frente a K')
plt.legend()
plt.show()

Imagen de Markus Distelrath en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
  • Probabilidades y tests: por qué un resultado positivo no significa lo que crees
  • JSON en bases de datos: cuándo es buena idea y cuándo no
  • Roles en ciencia de datos: Guía completa de perfiles técnicos
  • Exactitud, precisión, recall… qué mide realmente cada métrica (y qué no)
  • Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad
  • Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña
  • Hardening de NGINX en 2026: configuración segura básica paso a paso

Publicado en: Ciencia de datos Etiquetado como: Machine learning, Scikit-Learn

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Hardening de NGINX en 2026: configuración segura básica paso a paso

marzo 12, 2026 Por Daniel Rodríguez

Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña

marzo 10, 2026 Por Daniel Rodríguez

Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad

marzo 5, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Cómo calcular el tamaño de la muestra para encuestas publicado el septiembre 9, 2025 | en Ciencia de datos
  • Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey publicado el septiembre 4, 2025 | en Ciencia de datos, Opinión
  • Cómo instalar paquetes en Jupyter Notebook de forma eficiente: Guía completa con ejemplo publicado el febrero 3, 2025 | en Python
  • Cómo solucionar problemas de red en VirtualBox: Guía completa publicado el junio 11, 2025 | en Herramientas
  • Trabajar con datos faltantes con Seaborn publicado el agosto 29, 2023 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto