如何在sklearn中获取随机森林的决策函数

9
我正在使用以下代码通过gridsearchcv获取randomforest的优化参数。
x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=0)
rfc = RandomForestClassifier(random_state=42, class_weight = 'balanced')
param_grid = { 
    'n_estimators': [200, 500],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth' : [4,5,6,7,8],
    'criterion' :['gini', 'entropy']
}
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 10, scoring = 'roc_auc')
CV_rfc.fit(x_train, y_train)
print(CV_rfc.best_params_)
print(CV_rfc.best_score_)

现在,我想将调整的参数应用于X_test。为此,我执行了以下操作:
pred = CV_rfc.decision_function(x_test)
print(roc_auc_score(y_test, pred))

然而,decision_function不支持randomforest,我得到了以下错误:

属性错误:'RandomForestClassifier'对象没有属性 'decision_function'。

还有其他的方法吗?

需要更多细节,请告诉我。


1
你难道不是在寻找 CV_rfc.predict(x_test) 吗? - gmds
3个回答

12
如果你的意图是获取一个模型评分函数,以便可以用于auc_roc_score,那么你可以选择使用predict_proba()
y_pred_proba = CV_rfc.predict_proba(x_test)
print(roc_auc_score(y_test, y_pred_proba[:,1]))

请告诉我,您是否知道以下问题的答案:https://dev59.com/3VMI5IYBdhLWcg3wrNck 万分感谢 :) - EmJ
我们如何在GMM聚类中使用这个函数。 - imhans33
roc_auc_score 适用于分类问题。对于聚类,您可以参考这里 - Venkatachalam
我在逻辑回归分类器中使用decision_function()的置信度分数和predict_proba()的概率分数比较了metrics.roc_curve()的输出结果,它们都产生了相同的结果。 - Herman Autore

2
你可以使用predict()方法,或者使用best_estimator_获取优化后的随机森林模型。"Original Answer"翻译成"最初的回答"。

2
最初的回答
你的代码,
pred = CV_rfc.decision_function(x_test)
print(roc_auc_score(y_test, pred))

让我觉得你正试图用已训练的模型进行预测。 如果你想获得预测标签,可以这样做:
pred = CV_rfc.predict(x_test)

那么输出结果将是类标签,如[1, 2, 1, ... ] 如果您想获得类别概率,则可以使用predict_proba来实现,像这样:
pred = CV_rfc.predict_proba(x_test)

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