Fixing ValueError: feature_names must not contain [, ], or < in XGBoost

Abierto Apto para principiantes
#536 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

@github-actions ya está trabajando en esto.

Desde el 30/10/2026.

  • #537 de @github-actions — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
68/100
Tipo de issue
Documentación
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

El issue incluye la pregunta y una respuesta propuesta con un ejemplo en Python, pero no indica un archivo de destino ni una prueba. Empieza por comprobar cómo están organizadas las entradas existentes de las FAQ en el repositorio y, después, añade esta pregunta y respuesta en el lugar adecuado. La tarea estará terminada cuando la entrada explique los caracteres no válidos en los nombres de características e incluya el ejemplo de limpieza documentado.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

faq-proposal
Course

machine-learning-zoomcamp

Question

When creating a DMatrix for XGBoost in Module 6 using the features outputted by DictVectorizer:
dtrain = xgb.DMatrix(X_train, label=y_train, feature_names=dv.get_feature_names_out())
I get this error:
ValueError: feature_names must not contain [, ], or <
How do I fix this?

Answer

This error occurs because XGBoost has strict rules for feature names and does not allow certain characters (like [, ], <, or =). When using DictVectorizer with text or categorical columns, it often generates feature names containing these exact characters (e.g., origin=USA).

To resolve this, you must clean the feature names by replacing the invalid characters before passing them to DMatrix. You can do this easily using Python's re (regex) module:

import re
import xgboost as xgb

# 1. Get original feature names from DictVectorizer
feature_names = dv.get_feature_names_out().tolist()

# 2. Replace [, ], <, >, and = with underscores
clean_feature_names = [re.sub(r'[\[\]<>=]', '_', f) for f in feature_names]

# 3. Create the DMatrix using the clean names
dtrain = xgb.DMatrix(X_train, label=y_train, feature_names=clean_feature_names)
dval = xgb.DMatrix(X_val, label=y_val, feature_names=clean_feature_names)

### Checklist

- [x] I have searched existing FAQs and this question is not already answered
- [x] The answer provides accurate, helpful information
- [x] I have included any relevant code examples or links
Lenguaje dominante
Python
Estrellas
8
Forks
20
Merge medio
7 d 9 h
PR fusionados (30 d)
8

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de DataTalksClub/faq

Todos los issues de DataTalksClub/faq

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.