#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
Где я передаю три аргумента в приложение к словарю? И как я могу исправить код, чтобы он обрабатывался, а затем соответствовал конвейеру?