在随机森林中使用 predict() 与 predict_proba() 计算时,ROC_AUC_SCORE 不同

Posted

技术标签:

【中文标题】在随机森林中使用 predict() 与 predict_proba() 计算时,ROC_AUC_SCORE 不同【英文标题】:ROC_AUC_SCORE is different while calculating using predict() vs predict_proba() in Random Forest 【发布时间】:2019-10-17 05:22:41 【问题描述】:

predict() 和 predict_proba() 在随机森林中给出不同的 roc_auc_score。

我知道 predict_proba() 给出了概率,例如在二元分类的情况下,它将给出对应于两个类的两个概率。 predict() 给出它预测的类。

    #Using predict_proba()
    rf = RandomForestClassifier(n_estimators=200, random_state=39)
    rf.fit(X_train[['Cabin_mapped', 'Sex']], y_train)

    #make predictions on train and test set
    pred_train = rf.predict_proba(X_train[['Cabin_mapped', 'Sex']])
    pred_test = rf.predict_proba(X_test[['Cabin_mapped', 'Sex']].fillna(0))

    print('Train set')
    print('Random Forests using predict roc-auc: '.format(roc_auc_score (y_train, pred_train)))

    print('Test set')
    print('Random Forests using predict roc-auc: '.format(roc_auc_score(y_test, pred_test)))

   #using predict()

   pred_train = rf.predict(X_train[['Cabin_reduced', 'Sex']])
   pred_test = rf.predict(X_test[['Cabin_reduced', 'Sex']])

   print('Train set')
   print('Random Forests using predict roc-auc: '.format(roc_auc_score(y_train, pred_train)))
   print('Test set')
   print('Random Forests using predict roc-auc: '.format(roc_auc_score(y_test, pred_test)))

使用 predict_proba roc-auc 训练集随机森林:0.8199550985878832

使用 preditc_proba roc-auc 测试集随机森林:0.8332142857142857

使用预测 roc-auc 训练集随机森林:0.7779440793041364

使用预测 roc-auc 的测试集随机森林:0.7686904761904761

【问题讨论】:

【参考方案1】:

正如您所说,predict 函数将预测返回为 True/False 值,而 proba 函数返回概率,值介于 1 和 0 之间 这就是造成差异的原因。

AUC 的意思是“曲线下的面积”,如果曲线是 0/1 阶跃函数或由连续值组成的曲线,这确实是不同的。

假设你只有一个例子,它应该被归类为False。如果您的分类器产生 0.7 的概率,则 ROC-AUC 值为 1.0-0.7=0.3。如果您使用predict,则预测将为True = 1.0,因此ROC-AUC 将为1.0-1.0=0.0。

【讨论】:

找到了我想要的东西。【参考方案2】:

Predict 返回 0 或 1 作为输出。

Predict_proba 返回 1 的概率。

【讨论】:

以上是关于在随机森林中使用 predict() 与 predict_proba() 计算时,ROC_AUC_SCORE 不同的主要内容,如果未能解决你的问题,请参考以下文章

R中连续randomForest.predict调用的结果不一致

随机森林分类的​​ ROC 曲线

为啥随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配?

随机森林:预测 vs predict_proba

使用并行训练带有插入符号的随机森林

当缺少数据时,使用 R 随机森林预测新数据