Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

564
Vistas
Xgoost de Python: ValueError('feature_names puede no contener [, ] o <')

La implementación de Python de XGBClassifier no acepta los caracteres [, ] or <' como nombres de funciones.

Si eso ocurre, plantea lo siguiente:

ValueError('feature_names may not include [, ] or <')

Parecería que la solución obvia sería pasar las matrices numpy equivalentes y deshacerse de los nombres de las columnas por completo, pero si no lo han hecho, debe ser por una razón.

¿Qué uso tiene XGBoost para los nombres de funciones y cuál es la desventaja de simplemente pasar Numpy Arrays en lugar de Pandas DataFrames?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Sé que es tarde, pero escribo esta respuesta aquí para otras personas que puedan enfrentar esto. Esto es lo que encontré después de enfrentar este problema: este error generalmente ocurre si los nombres de sus columnas tienen los símbolos [ or ] or < . Aquí hay un ejemplo:

 import pandas as pd import numpy as np from xgboost.sklearn import XGBRegressor # test input data with string, int, and symbol-included columns df = pd.DataFrame({'0': np.random.randint(0, 2, size=100), '[test1]': np.random.uniform(0, 1, size=100), 'test2': np.random.uniform(0, 1, size=100), 3: np.random.uniform(0, 1, size=100)}) target = df.iloc[:, 0] predictors = df.iloc[:, 1:] # basic xgb model xgb0 = XGBRegressor(objective= 'reg:linear') xgb0.fit(predictors, target)

El código anterior arrojará un error:

 ValueError: feature_names may not contain [, ] or <

Pero si elimina esos corchetes de '[test1]' , entonces funciona bien. A continuación se muestra una forma genérica de eliminar [, ] or < de los nombres de sus columnas:

 import re import pandas as pd import numpy as np from xgboost.sklearn import XGBRegressor regex = re.compile(r"\[|\]|<", re.IGNORECASE) # test input data with string, int, and symbol-included columns df = pd.DataFrame({'0': np.random.randint(0, 2, size=100), '[test1]': np.random.uniform(0, 1, size=100), 'test2': np.random.uniform(0, 1, size=100), 3: np.random.uniform(0, 1, size=100)}) df.columns = [regex.sub("_", col) if any(x in str(col) for x in set(('[', ']', '<'))) else col for col in df.columns.values] target = df.iloc[:, 0] predictors = df.iloc[:, 1:] # basic xgb model xgb0 = XGBRegressor(objective= 'reg:linear') xgb0.fit(predictors, target)

Para obtener más información, lea esta línea de código de xgboost core.py: xgboost/core.py . Esa es la comprobación en su defecto que arroja el error.

over 4 years ago · Santiago Trujillo Denunciar

0

Esta es otra solución de expresiones regulares.

 import re regex = re.compile(r"\[|\]|<", re.IGNORECASE) X_train.columns = [regex.sub("_", col) if any(x in str(col) for x in set(('[', ']', '<'))) else col for col in X_train.columns.values]
over 4 years ago · Santiago Trujillo Denunciar

0

Otra solución más:

X.columns = X.columns.str.translate("".maketrans({"[":"{", "]":"}","<":"^"}))

Si te interesa ver cuales son los culpables:

X.columns[X.columns.str.contains("[\[\]<]")]

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda