Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

564
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda