python - 使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低
问题描述
我在不调整超参数的情况下收到的 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
解决方案
我预计这有两个可能的原因。
- 在前一个模型中,最大深度设置为 None,这意味着节点被扩展直到所有叶子都是纯的或直到所有叶子包含少于 min_samples_split 样本,而
max_depth=4
在后者中,这使得模型不太灵活。
建议:可以max-depth
在Grid Search中增加范围
- 估计器的数量 (
n_estimators
) 从 100 减少到 10。这使得 Ensemble 模型更弱。
建议:增加估算器的数量或调整估算器的数量。
推荐阅读
- java - HttpURLConnection 的套接字泄露
- elasticsearch - Elasticsearch 批量更新查询?
- python-3.x - 尝试使用两个数据帧找到匹配项并为匹配项生成相应的值
- angular - 哪种类型的 og:type 值允许元属性 product:retailer_item_id?
- conv-neural-network - 在特定对象检测任务上使用预训练权重
- c# - 无法从“对象”转换为“UnityEngine.Vector2”
- javascript - 当用户单击正确的 div 时,我可以让我的脚本运行,但是当 div 简单地在浏览器上可见时,我怎样才能让它运行呢?
- splunk - 如何在 Splunk 中的事务搜索的末尾添加“Not”
- python - 使用 Python 从 psycopg2 解析查询结果字符串
- crash - 如何在 ios13 上使用 [[UIApplication sharedApplication] valueForKey:@"statusBar"] 获取 wifi 信号强度?