使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低

Posted

技术标签:

【中文标题】使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低【英文标题】:AUC of Random forest model is lower after tuning parameters using hypergrid search and CV with 10 folds 【发布时间】:2019-05-11 12:58:48 【问题描述】:

我在未调整超参数的情况下收到的 AUC 值更高。 我使用了相同的训练数据,这里可能缺少一些东西或一些有效的解释。

数据是推文词嵌入的平均值,该推文使用预训练的 GLoVE 向量计算 50 维推文

没有调整:

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=None,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)

AUC- 0.978

调整:

GridSearchCV(cv=10, error_score='raise-deprecating',
       estimator=RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators='warn', n_jobs=None,
            oob_score=False, random_state=42, verbose=0, warm_start=False),
       fit_params=None, iid='warn', n_jobs=3,
       param_grid='max_features': ['auto', 'sqrt', 'log2', None], 'bootstrap': [True, False], 'max_depth': [2, 3, 4], 'criterion': ['gini', 'entropy'],
       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
       scoring=None, verbose=0)
print(cv_rf.best_estimator_)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=4, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=None,
            oob_score=False, random_state=42, verbose=0, warm_start=False)

AUC-0.883

【问题讨论】:

@VivekKumar forest25.fit(embed_tweets25, train_y)probs = forest25.predict_proba(embed_tweets_test25) probs1 = [i[1] for i in probs] auc = roc_auc_score(valid_y, probs1) 【参考方案1】:

我预计这有 2 个可能的原因。

    前一个模型中Max-depth设置为None,这意味着节点被扩展直到所有叶子都是纯的或直到所有叶子包含少于min_samples_split样本,而在后者中max_depth=4,这使得模型不太灵活。

建议:可以在Grid Search中增加max-depth的范围

    估计器的数量 (n_estimators) 从 100 减少到 10。这使得 Ensemble 模型更弱。

建议:增加估算器的数量或调整估算器的数量。

【讨论】:

以上是关于使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低的主要内容,如果未能解决你的问题,请参考以下文章

Lesson 10.1 超参数优化与枚举网格的理论极限和随机网格搜索 RandomSearchCV

使用 KerasClassifier 随机搜索cv 进行超参数优化,TypeError: 'list' 对象不能被解释为整数

构建用于调整超参数的网格搜索

使用预定义的拆分重新调整网格搜索的属性?

我应该在 SMOTE 之前还是之后执行网格搜索(用于调整超参数)?

svm 超参数调整:使用 e1071 tune.control 进行随机搜索。 random != NULL 在外部函数调用中给出 NA/NaN/Inf (arg 10)