Я создал конвейер для запуска моего препроцессора и управления отсутствующими значениями и т. Д. c. но я застрял, когда пытаюсь использовать RandomizedSearchCV. Нормальный GridsearchCV работает нормально.
Это контролируемый стиль обучения и задача обучения классификации, предсказывающая / классифицирующая двоичную цель (1/0).
Это моя модель:
# Random Forest
RF = RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features='auto', max_leaf_nodes=None, random_state=1337)
И здесь я настраиваю конвейер и пытаюсь получить оценку, но это, вероятно, не работает.
pipeline_RF = Pipeline(steps=[
('preprocessor', preprocessor),
#('pca', pca),
('rf', RF)
])
print("\n------------ Randomized Search (Random Forest) ------------")
param_distributions = {
'rf__n_estimators': np.random.randint(1, 200, 10),
'rf__max_depth': np.random.randint(1, 100, 10),
'rf__min_samples_split': np.linspace(0.1, 1.0, 10, endpoint=True),
'rf__min_samples_leaf': np.linspace(0.1, 0.5, 5, endpoint=True),
'rf__criterion': ['entropy'],
'rf__max_features': ['auto']
}
rscv = RandomizedSearchCV(pipeline_RF, param_distributions=param_distributions, cv = StratifiedKFold(n_splits=5),
scoring="recall", n_iter=2, refit=True, n_jobs=-1, random_state=1337, return_train_score=True, verbose=10)
rscv.fit(X_train, y_train)
print("\nBest parameter (CV score=%0.3f):" % rscv.best_score_)
print("\Best Hyperparameters: ", rscv.best_params_)
y_pred = rscv.best_estimator_.predict(X_test)
print("\nPrecision, Recall, F1 and Support: ", precision_recall_fscore_support(y_test, y_pred, average='binary'))
Сообщение об ошибке следующее, но мне не очень помогает:
------------ Randomized Search (Random Forest) ------------
Fitting 5 folds for each of 2 candidates, totalling 10 fits
[Parallel(n_jobs=-1)]: Using backend LokyBackend with 2 concurrent workers.
[Parallel(n_jobs=-1)]: Done 1 tasks | elapsed: 4.4s
[Parallel(n_jobs=-1)]: Done 4 tasks | elapsed: 8.1s
[Parallel(n_jobs=-1)]: Done 10 out of 10 | elapsed: 18.4s finished
Best parameter (CV score=0.000):
\Best Hyperparameters: {'rf__n_estimators': 135, 'rf__min_samples_split': 0.30000000000000004, 'rf__min_samples_leaf': 0.30000000000000004, 'rf__max_features': 'auto', 'rf__max_depth': 51, 'rf__criterion': 'entropy'}
Precision, Recall, F1 and Support: (0.0, 0.0, 0.0, None)
/usr/local/lib/python3.6/dist-packages/sklearn/metrics/_classification.py:1272: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
Похоже, он установил гиперпараметры (хотя они кажутся одинаковыми каждый раз, когда я запускаю его).
Кто-нибудь знает, как это исправить?