如何解决为什么我的 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_score 和 Why does roc_curve return only 3 values?。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。