1
resposta

Problemas no momento da

Tive problemas no momento de utilizar esse método, pois o "X_train" ou "y_train" estavam em um formato inadequado. Não sei se pulei algum passo da aula para gerar esse problema, mas cheguei na seguinte solução:

if isinstance(X_train, pd.Series):
    X_train = X_train.to_frame()

if len(X_train.shape) == 1:
    X_train = X_train.values.reshape(-1, 1)

if len(y_train.shape) == 2 and y_train.shape[1] == 1:
    y_train = y_train.ravel()

cv = KFold(n_splits=5, shuffle=True, random_state=42)

model_grid = GridSearchCV(
    RandomForestRegressor(random_state= 42 ),
    param_grid = param_grid,
    scoring = 'r2',
    cv = cv
)

model_grid.fit(X_train, y_train)

Logo em seguida, apresentou outro erro parecido, já deixo a correção que encontrei:

if isinstance(X_test, pd.Series):
    X_test = X_test.to_frame()

if len(X_test.shape) == 1:
    X_test = X_test.values.reshape(-1, 1)

y_pred_model_grid = model_grid.predict(X_test)

metricas_model_grid = calcular_metricas_regressao(y_test, y_pred_model_grid)
metricas_model_grid
1 resposta

Oi Lucas,

Parece que você enfrentou um problema de formato com as variáveis X_train e y_train, que são esperadas pelo GridSearchCV em formatos específicos. A solução que você encontrou faz sentido, pois o GridSearchCV e outros métodos como RandomForestRegressor do scikit-learn esperam entradas no formato de arrays 2D para X_train (mesmo que haja apenas uma variável preditora) e arrays 1D para y_train.

Explicando sua solução:

  1. Transformando X_train em um DataFrame (caso seja uma Série):

    • O pd.Series pode ser problemático para modelos que esperam um DataFrame ou array 2D. Por isso, ao verificar se X_train é uma pd.Series, você converte para DataFrame com o .to_frame().
    if isinstance(X_train, pd.Series):
        X_train = X_train.to_frame()
    
  2. Garantindo que X_train seja 2D:

    • Mesmo após a conversão, se X_train for unidimensional, você a transforma em uma forma 2D com .reshape(-1, 1), o que é necessário para que o modelo consiga entender corretamente as variáveis preditoras.
    if len(X_train.shape) == 1:
        X_train = X_train.values.reshape(-1, 1)
    
  3. Ajustando y_train para ser 1D:

    • O y_train deve ser uma série 1D com os valores alvo, então você usa ravel() para garantir que ele esteja no formato adequado.
    if len(y_train.shape) == 2 and y_train.shape[1] == 1:
        y_train = y_train.ravel()
    
  4. Repetindo o mesmo processo para X_test:

    • Da mesma forma que fez com X_train, você aplica o mesmo tipo de correção para X_test e também faz a previsão utilizando model_grid.predict(X_test).
    if isinstance(X_test, pd.Series):
        X_test = X_test.to_frame()
    
    if len(X_test.shape) == 1:
        X_test = X_test.values.reshape(-1, 1)
    

Sobre o erro de formato:

No geral, o erro de formato ocorre porque GridSearchCV precisa de uma entrada consistente para X e y. Ao garantir que ambos estejam em formatos adequados (2D para X e 1D para y), você resolveu o problema. Isso é uma boa prática para evitar erros de dimensionalidade em modelos do scikit-learn.

Se surgir qualquer outra dúvida ou erro, é só chamar!