GridSearchCV выдает ошибку словаря?

#python #dictionary #pipeline #random-forest #gridsearchcv

Вопрос:

Я играю с набором данных «Титаник». Использование конвейера для обработки (с помощью GridSearchCV) и регрессии всех сразу. Я могу настроить конвейер, сетку параметров и поиск по сетке просто отлично. Ошибка возникает, когда я пытаюсь подогнать GridSearchCV.

Вот код в строке, выдающий ошибку.

 import os
os.chdir("FileLocation")

import pandas as pd
titanic_train = pd.read_csv("train.csv")
titanic_test = pd.read_csv("test.csv")

#omit nominal fields
titanic_train_d = titanic_train.drop(['Ticket','PassengerId','Name', 'Cabin'], axis = 1)
test_set = titanic_test.drop(['Ticket','PassengerId','Name', 'Cabin'], axis = 1)
#omit the rows where a column is missing only a value or two
train_set = titanic_train_d.dropna(subset=['Embarked'])
test_set = test_set.dropna(subset=['Fare'])

#split to train and validation
from sklearn.model_selection import train_test_split
train_set, validation_set = train_test_split(train_set, test_size=.2, random_state=42)
train_features = train_set.drop(['Survived'], axis = 1)

#divide features into numeric and categorical for processing
train_features_num = train_features.drop(["Pclass", 'Embarked'], axis = 1)
train_features_cat = train_features[['Pclass', 'Embarked', 'Sex']]

#Pipeline each for features
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
import numpy as np
from sklearn.ensemble import RandomForestRegressor
rf_reg = RandomForestRegressor()

#Fuller pipeline
from sklearn.model_selection import GridSearchCV

param_grid = {
        'impute__strategy': ["mean", "median", "most_frequent"],
        }

test_impute_pipe = Pipeline(
                    steps=[
                        ('impute', SimpleImputer(missing_values=np.nan), train_features_num),
                        ('one_hot_encode', OneHotEncoder(), train_features_cat),
                        ('rf_reg', RandomForestRegressor())
                    ])

import pandas as pd
train_features = pd.DataFrame(train_set.drop(['Survived'], axis = 1)).to_numpy()
train_values = train_set['Survived'].copy().to_numpy()
imputer_method_search = GridSearchCV(test_impute_pipe, param_grid, cv = 5, scoring = 'neg_mean_squared_error', verbose = 4, n_jobs = 6)
imputer_method_search.fit(train_features, train_values)
 

Когда я запускаю код, он проходит 60-80% пути поиска по сетке и выдает эту ошибку.

 ValueError: dictionary update sequence element #0 has length 3; 2 is required
 

Где я передаю три аргумента в приложение к словарю? И как я могу исправить код, чтобы он обрабатывался, а затем соответствовал конвейеру?