【发布时间】:2021-07-18 05:26:00
【问题描述】:
我正在使用 xgboost 解决数据集不平衡的分类问题。我计划使用 f1-score 或 roc-auc 的某种组合作为我判断模型的主要标准。
目前score 方法返回的默认值是准确度,但我真的希望返回一个特定的评估指标。我这样做的主要动机是我假设模型中的feature_importances_ 属性是由影响score 方法的因素确定的,并且影响预测准确性的列很可能与影响 roc-auc 的列不同。现在我正在将值传递给eval_metric,但它似乎没有什么不同。
这里是一些示例代码:
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import roc_auc_score
data = load_breast_cancer()
X = data['data']
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2, stratify=y)
mod.fit(X_train, y_train)
此时,mod.score(X_test, y_test) 将返回一个 ~ 0.96 的值,而 roc_auc_score 将返回 ~ 0.99。
我希望以下 sn-p:
mod.fit(X_train, y_train, eval_metric='auc')
然后将允许 mod.score(X_test, y_test) 返回 roc_auc_score 值,但它仍然返回预测准确性,而不是 roc_auc。
这个练习的目的是估计不同列对结果的影响,所以如果我可以使用 f1 或 roc_auc 返回 feature_importances_ 作为影响的衡量标准,这将是一个巨大的好处,但我似乎没有现在走在正确的道路上。
谢谢。
【问题讨论】:
标签: python scikit-learn xgboost