Sal*_*qri 3 machine-learning python-3.x random-forest scikit-learn
在随机森林中,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)))
Run Code Online (Sandbox Code Playgroud)
使用 Predict_proba roc-auc 训练随机森林集:0.8199550985878832
使用 preditc_proba roc-auc 测试集随机森林:0.8332142857142857
使用预测 roc-auc 训练随机森林集:0.7779440793041364
使用预测 roc-auc 测试集随机森林:0.7686904761904761
正如您所说,该predict函数将预测返回为True/False值,而proba函数返回概率,即 1 和 0 之间的值,这就是差异的原因。
AUC 表示“曲线下面积”,如果曲线是 0/1 阶跃函数或由连续值组成的曲线,则 AUC 确实有所不同。
假设您只有一个示例,它应该归类为False. 如果您的分类器产生的概率为 0.7,则 ROC-AUC 值为 1.0-0.7=0.3。如果您使用predict,则预测将为True= 1.0,因此 ROC-AUC 将为 1.0-1.0=0.0。