微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的 CatBoost 拟合指标与 sklearn 评估指标不同?

如何解决为什么我的 CatBoost 拟合指标与 sklearn 评估指标不同?

我仍然不确定这是否应该是本论坛或交叉验证的问题,但我会尝试这个,因为它更多的是关于代码输出而不是技术本身。事情是这样的,我正在运行 catboost 分类器,就像这样:

# import libraries
import pandas as pd
from catboost import catboostClassifier
from sklearn.metrics import accuracy_score,recall_score,precision_score,f1_score
from sklearn.model_selection import train_test_split    

# import data
train = pd.read_csv("train.csv")

# get features and label
X = train[["Pclass","Sex","SibSp","Parch","fare"]]

y = train[["Survived"]]

# split into train and test
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)

# model parameters 
model_cb = catboostClassifier(
    cat_features=["Pclass","Sex"],loss_function="Logloss",eval_metric="AUC",learning_rate=0.1,iterations=500,od_type = "Iter",od_wait = 200
)

# fit model
model_cb.fit(
    X_train,plot=True,eval_set=(X_test,y_test),verbose=50,)

y_pred = model_cb.predict(X_test)

print(f1_score(y_test,y_pred,average="macro"))

print(roc_auc_score(y_test,y_pred))

我使用的数据帧来自泰坦尼克号竞赛 (link)。

问题是 model_cb.fit 步骤显示的 AUC 为 0.87,但最后一行,来自 sklearn 的 roc_auc_score 显示我的 AUC 为 0.73,即低得多。根据我的理解,catboost 的 AUC 应该已经在测试数据集上。

关于这里的问题是什么以及我该如何解决的任何想法?

解决方法

ROC 曲线需要预测概率或某种其他类型的置信度量,而不是硬类预测。使用

const link = 'https://media3.giphy.com/media/l4KhOnw5d48Hj7TY4/giphy.gif?cid=51e33fa1qhfyr4pzjh0jamnoj8d46and0dt78jxt4lsyncah&rid=giphy.gif'

const handleLinks = link => link.includes('media3.giphy.com/media/') ? 'giphy gif' : '';

const giphy = handleLinks(link)
console.log(giphy);

参见 Scikit-learn : roc_auc_scoreWhy does roc_curve return only 3 values?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。