使用mlxtend做序列特征选择时多分类roc_auc报错求助
多分类任务下SFFS使用roc_auc报错的解决方法
问题原因
你遇到的ValueError: multiclass format is not supported错误,本质是因为指定的scoring="roc_auc"在sklearn中默认不支持多分类(5分类)任务——roc_auc指标原生仅适配二分类场景。
解决方法
有两种可行的修正方案:
方案1:改用多分类兼容的评分指标
直接替换为支持多分类的评估指标,比如accuracy、f1_weighted、balanced_accuracy等,这些指标原生支持多分类任务。修改后的代码如下:
from sklearn.ensemble import RandomForestClassifier from mlxtend.feature_selection import SequentialFeatureSelector as SFS # 初始化模型 model = RandomForestClassifier(n_jobs=-1, verbose=0) # 初始化SFS对象,替换为多分类支持的评分指标 sffs = SFS(model, k_features = "best", forward = True, floating = True, n_jobs=-1, verbose = 2, scoring= "f1_weighted", cv=5 ) sffs.fit(X, y)
方案2:自定义多分类版本的roc_auc评分器
如果必须使用roc_auc作为评估指标,可以通过sklearn.metrics.make_scorer自定义支持多分类的roc_auc评分器,指定multi_class参数为"ovr"(一对多)或"ovo"(一对一)。代码示例如下:
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_auc_score, make_scorer from mlxtend.feature_selection import SequentialFeatureSelector as SFS # 初始化模型 model = RandomForestClassifier(n_jobs=-1, verbose=0) # 自定义多分类roc_auc评分器,这里采用一对多策略 multiclass_roc_auc = make_scorer(roc_auc_score, multi_class="ovr", needs_proba=True) # 初始化SFS对象,使用自定义评分器 sffs = SFS(model, k_features = "best", forward = True, floating = True, n_jobs=-1, verbose = 2, scoring= multiclass_roc_auc, cv=5 ) sffs.fit(X, y)
注意:使用roc_auc多分类版本时,需要确保评估器支持输出概率(RandomForestClassifier默认支持),因此设置
needs_proba=True。
内容的提问来源于stack exchange,提问作者arilwan
相关产品推荐
相关产品推荐

