在随机森林中使用 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调用的结果不一致