随机森林中使用predict()和predict_proba()计算时的ROC_AUC_SCORE不同

在随机森林中,使用predict()和predict_proba()得到的roc_auc_score是不同的。

我理解predict_proba()会给出概率,例如在二分类的情况下,它会给出对应两个类别的两个概率。predict()则会给出它预测的类别。

    #使用predict_proba()
    rf = RandomForestClassifier(n_estimators=200, random_state=39)
    rf.fit(X_train[['Cabin_mapped', 'Sex']], y_train)
    #在训练集和测试集上进行预测
    pred_train = rf.predict_proba(X_train[['Cabin_mapped', 'Sex']])
    pred_test = rf.predict_proba(X_test[['Cabin_mapped', 'Sex']].fillna(0))
    print('训练集')
    print('使用predict_proba的随机森林roc-auc: {}'.format(roc_auc_score (y_train, pred_train)))
    print('测试集')
    print('使用predict_proba的随机森林roc-auc: {}'.format(roc_auc_score(y_test, pred_test)))
   #使用predict()
   pred_train = rf.predict(X_train[['Cabin_reduced', 'Sex']])
   pred_test = rf.predict(X_test[['Cabin_reduced', 'Sex']])
   print('训练集')
   print('使用predict的随机森林roc-auc: {}'.format(roc_auc_score(y_train, pred_train)))
   print('测试集')
   print('使用predict的随机森林roc-auc: {}'.format(roc_auc_score(y_test, pred_test)))

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

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

训练集使用predict的随机森林roc-auc: 0.7779440793041364

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


回答:

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

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。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注