Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

565
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!