如何在sklearn中的randomforest中获得决策函数

时间:2019-04-10 06:01:55

标签: python machine-learning scikit-learn random-forest grid-search

我正在使用以下代码通过randomforest获取gridsearchcv的优化参数。

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

  

AttributeError:“ RandomForestClassifier”对象没有属性   'decision_function'。

还有其他方法吗?

很高兴在需要时提供更多详细信息。

3 个答案:

答案 0 :(得分:2)

您可以使用预报()方法,也可以使用best_estimator_获得优化的随机森林模型。

答案 1 :(得分:2)

如果您打算获得模型评分功能,以便可以对auc_roc_score使用评分,则可以进行predict_proba()

y_pred_proba = CV_rfc.predict_proba(x_test)
print(roc_auc_score(y_test, y_pred_proba[:,1]))

答案 2 :(得分: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)