在sklearn RandomForestClassifier中移动假想决策边界

时间:2018-12-18 03:27:53

标签: python scikit-learn

我正在为我的任务使用RandomForestClassifier。拟合数据(数据已平衡),进行了交叉验证。当然在预测中会出现一些错误,但这是可以接受的。我的任务是二进制的,但由于第一类的样品定义不正确,因此其定义比第二类更为重要。是否有任何方法可以将假想决策边界移至第二类,从而通过牺牲第二类的准确性来最大程度地减少第一类的误差?

    ml_model = RandomForestClassifier(random_state=17, n_jobs=-1, class_weight='balanced')
    ml_params = {'max_depth': range(5, 16), 'max_features': range(4, 15)}

    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
    ml_grid = GridSearchCV(ml_model, ml_params, cv=skf, n_jobs=-1, scoring='roc_auc')
    ml_grid.fit(x_train, y_train)

...
    ml_grid.best_estimator_.predict(some_sample)

1 个答案:

答案 0 :(得分:0)

如果使用连续概率,则可以更改决策阈值,以偏向一个类别。然后,您将使用estimator.predict_proba() < 0.3< 0.7而不是estimator.predict()

您可以使用RandomForest来做到这一点,但使用梯度增强树(直接提供连续输出)可能会获得更好的结果。

您可以使用ROC曲线图来确定合适的阈值,以给出适合您的应用的精度/召回曲线。