Как хранить sklearn Pipelines в словаре? - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь подогнать различные конвейеры и сохранить их в словаре, но всякий раз, когда я вызываю конкретную модель из словаря, она всегда возвращает последний конвейер. Как правильно хранить конвейеры в словаре?

for var in vars:

    X = X_train[X_train.columns[X_train.columns.str.contains(var)]]
    y = Y_train[var] 

    pipe = Pipeline([('scaler', scaler), ('clf', classifier)])
    models[var] = [X.columns,pipe.fit(X,y)]

1 Ответ

0 голосов
/ 06 октября 2019

Общий способ хранения моделей в словаре:

from sklearn.linear_model import LinearRegression
from sklearn import svm

X = [some features]
y = [some labels]

models_dictionary = {}
clf_1 = LinearRegression()
clf_2 = svm.SVR()

models_dictionary["Linear_Regression"] = clf_1
models_dictionary["Support_Vector _Machine"] = clf_2 

# training all models:
for model in models_dictionary:
    models_dictionay[model].fit(X, y)

Ваш код:

pipe.fit(X,y) - это функция на месте, откуда и возникает ваша проблема.

вместо этой строки:

models[var] = [X.columns,pipe.fit(X,y)]

используйте это:

pipe.fit(X,y)
models[var] = [X.columns,pipe]

, поскольку pipe.fit(X,y) не возвращает модель, она просто соответствует конвейеру, хранящемуся в pipe.

тогда вы сможете использовать любой конвейер для прогнозирования значений непосредственно из models, делая это:

y_predictions = models[some_var][1].predict(X_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...