【发布时间】:2020-06-18 23:41:46
【问题描述】:
我已经创建了一个管道来运行我的预处理器并管理缺失值等,但是当我尝试使用 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))
看起来它设置了超参数(尽管每次运行它时它们似乎都是一样的)。
有人知道如何解决这个问题吗?
【问题讨论】:
-
仔细查看警告信息;您建模的某些类无法预测,从而导致相应的指标未定义。
-
y_train的班级余额是多少? -
@BenReiniger 感谢您的回答!目标变量是“成功”,“否”出现 32893 次,“是”只有“4176”,因此成功率为 12.7%。这是你要求的吗?
标签: python machine-learning scikit-learn