проверка утечки данных в сетке поиска - PullRequest
0 голосов
/ 10 марта 2020

Есть ли утечка данных в этом фрагменте кода?

     X_train, X_test, Y_train, y_test = train_test_split(X, y, test_size = 
        0.20, random_state = 0, stratify=y)
        skfolds = StratifiedKFold(n_splits=5, random_state=0)
        dict = {0: 0.33421052631578946, 1: 0.6657894736842105}
        score={'precision_score':make_scorer(precision_score),
            'recall_score': make_scorer(recall_score),
            'accuracy_score': make_scorer(accuracy_score),
            'f1_score':make_scorer(f1_score)
          }
    params = [{'n_estimators': [50, 100, 200, 250, 300, 350],
       'max_features': ['sqrt','auto', 'log2', 0.8],
       'max_depth': [1, 5, 10, 20, 30, 40, 50],
       'min_samples_leaf': [1, 2, 4, 5, 10, 20],
       'min_samples_split': [0.1, 0.5, 1, 5, 10, 12]}]

    for df,(df_train,df_val) in (enumerate (skfolds.split(X,y))):
         X_train,X_val = X.iloc[df_train],X.iloc[df_val] 
         y_train,y_val = y.iloc[df_train],y.iloc[df_val]
         sc = RobustScaler()
         X_train_sc = sc.fit_transform(X_train)
         X_test_sc = sc.transform(X_test)
         sm = SMOTE(random_state=12)
         X_train_res, y_train_res = sm.fit_sample(X_train_sc, y_train)
         gcv_rf4 = GridSearchCV(estimator=RandomForestClassifier(random_state=0, class_weight=dict),
            cv=skfolds, scoring=score, n_jobs=-1,
            verbose=4, param_grid=params, refit='f1_score',
            return_train_score=True)
         fit4 = gcv_rf4.fit(X_train_res, y_train_res)
         test_pred1 = gcv_rf4.predict(X_test_sc)

Я пробовал оба с X_test и X_test_sc. В первом случае результаты (точность, отзыв и F1) для положительного класса равны 0! во втором случае результаты для обоих классов удивительно высоки, и это заставило меня усомниться в возможной утечке данных. (Я знаю, что не нужно использовать масштабирование в RF)

...