PicklingError при запуске конвейера в sklearn - PullRequest
0 голосов
/ 11 апреля 2020

Я выполняю следующий конвейер в sklearn для выполнения поиска по сетке

def logistic():

    sm = SMOTE()
    poly = polynomial_transform()
    stand = StandardScaler()
    pca = PCA()

    #I need to think about how I am training this...
    logistic = LogisticRegression(max_iter=100, tol=0.01,solver = 'saga')    #what is my binary scorer here

    pipe = Pipeline(steps=[('smt', sm),('poly', poly),('standardise', stand),('pca', pca), ('logistic', logistic)],memory = mem)

    # Parameters of pipelines can be set using ‘__’ separated parameter names:
    param_grid = {
        #'poly__degree': [1,2],
        'pca__n_components':[50,100],
        'logistic__C': [0.0001],
    }

    scorers = {
        'precision_score': make_scorer(precision_score),
        'recall_score': make_scorer(recall_score),
        'accuracy_score': make_scorer(accuracy_score),
        'f1_score': make_scorer(f1_score),
        'tp': make_scorer(tp),
        'tn': make_scorer(tn),
        'fp': make_scorer(fp),
        'fn': make_scorer(fn),
        'ck': make_scorer(cohen_kappa_score)
    }

    #performing grid search
    search = GridSearchCV(pipe, param_grid, n_jobs=-1,verbose=2,scoring= scorers,refit='accuracy_score')
    search.fit(X_train.to_numpy(), y_train.to_numpy().ravel())

    #results of cross validation grid search
    print("Best parameter (CV score=%0.3f):" % search.best_score_)
    print(search.best_params_)

    return search

Полиномиальное преобразование - это класс, который я создал сам

class polynomial_transform(BaseEstimator):

    def __init__(self,degree=None):
        self.degree=degree

    def fit(self,X,y=None):
        return self

    #Method that describes what we need this transformer to do
    def transform( self, X, y = None ):

        for i in range(1,self.degree):
            X = np.hstack((X, X**i))

        return X


    def set_params(self, degree):
        self.degree = degree
    def get_params(self,deep=True):
        return {'degree':self.degree}

При настройке параметра памяти в конвейере Я получаю следующую ошибку

FitFailedWarning: Ошибка подбора оценщика. Балл по этому разделу испытания поезда для этих параметров будет установлен на Nan. Подробности: _pickle.PicklingError: ("Невозможно засолить: он не найден как main .polynomial_transform"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...