我正在尝试使分类器尽可能简洁。为此,我使用交叉验证递归地删除功能。
在我的模型中,精度是最重要的指标。然而,我还想看看随着模型输入的特征减少,其他指标如何演变。
特别是,我想评估模型的召回率和 F1 分数。
rfe = RFECV(
estimator=clf, # An XGBClassifier instance
step=1,
min_features_to_select=1,
cv=cv, # A StratifiedKFold instance
scoring='precision',
# scoring=['f1', 'precision', 'recall'], # throws error
verbose=1,
n_jobs=1
)
我注释掉了将指标列表传递给
scoring
参数的行,因为它抛出了 InvalidParameterError
(也就是说,它不高兴我向它传递了一个列表)。
有没有办法将多个指标传递给 RFECV 实例?
RFECV 根据评分函数一一剔除特征。在每次迭代中,它都会遍历所有剩余变量,并根据评分结果消除一个特征。因此,它需要一个数字来决定要删除哪个功能。因此它不能使用多个评分函数,除非它们通过自定义评分器以某种方式组合。
回答你的问题:如果你想获得3个独立的评分函数输出,你需要分别对rfe输出进行评分。
还要注意,因为
f1
已经是 precision
和 recall
的混合体,因此可能值得使用 scoring='f1'
运行 RFECV