基于概率的GridSearchCV超参数调优随机森林分类器

3

我刚开始进行随机森林二元分类的超参数调整,想知道是否有人知道/能够建议如何设置评分以基于预测概率而不是预测分类。理想情况下,我希望有一种方法可以考虑下面的概率(即[0.2,0.6,0.7,0.1,0.0])来计算roc_auc,而不是分类(即[0,1,1,0,0])。

from sklearn.metrics import roc_auc_score
from sklearn.ensemble import RandomForestClassifier as rfc
from sklearn.grid_search import GridSearchCV

rfbase = rfc(n_jobs = 3, max_features = 'auto', n_estimators = 100, bootstrap=False)

param_grid = {
    'n_estimators': [200,500],
    'max_features': [.5,.7],
    'bootstrap': [False, True],
    'max_depth':[3,6]
}

rf_fit = GridSearchCV(estimator=rfbase, param_grid=param_grid
      , scoring = 'roc_auc')

我认为当前的roc_auc是基于实际分类结果计算的。在着手创建自定义评分函数之前,希望先确认是否有更高效的方法。非常感谢您的帮助!


1
看看skearn的make_scorer。它有一个needs_proba参数。你可以从这个例子中组合出一些东西。 - Jarad
谢谢您的快速回复,正是我所需要的!如果您想将其转换为答案,我会在测试后很乐意投票 :) - Ben Saunders
确认按预期工作,再次感谢您在这里提供快速帮助! - Ben Saunders
1
很高兴能够帮助到您。这取决于您,但您可能希望使用您发现的解决方案回答自己的问题。根据SO的说法,尽管某些“专家”不喜欢和忽视这一事实,但这是鼓励的 - Jarad
嘿@Mighty,我认为你可能会得到这个提示,因为你的y_pred只是一个浮点数数组(即预测概率)。在我的例子中,它是一个类似元组的数组,包含了类别可能性(类[0,1]),因为我使用的是随机森林分类器(即[.7,.3],[.45,.55])。如果你的y_pred只是一个数组,你可以删除代码中的“[:, 1]”部分。 - Ben Saunders
显示剩余2条评论
1个回答

3

使用Jarad提供的参考解决方案:

from sklearn.metrics import roc_auc_score
from sklearn.ensemble import RandomForestClassifier as rfc
from sklearn.grid_search import GridSearchCV

rfbase = rfc(n_jobs = 3, max_features = 'auto', n_estimators = 100, bootstrap=False)

param_grid = {
    'n_estimators': [200,500],
    'max_features': [.5,.7],
    'bootstrap': [False, True],
    'max_depth':[3,6]
}

def roc_auc_scorer(y_true, y_pred):
    return roc_auc_score(y_true, y_pred[:, 1])
scorer = make_scorer(roc_auc_scorer, needs_proba=True)

rf_fit = GridSearchCV(estimator=rfbase, param_grid=param_grid
      , scoring = scorer)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接