EmJ*_*EmJ 2 python classification machine-learning scikit-learn cross-validation
我有一个分类问题,我想在 sklearn 中roc_auc使用该值cross_validate。我的代码如下。
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features.
y = iris.target
from sklearn.ensemble import RandomForestClassifier
clf=RandomForestClassifier(random_state = 0, class_weight="balanced")
from sklearn.model_selection import cross_validate
cross_validate(clf, X, y, cv=10, scoring = ('accuracy', 'roc_auc'))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误。
ValueError: multiclass format is not supported
Run Code Online (Sandbox Code Playgroud)
请注意,我roc_auc特别选择的是它同时支持binary和multiclass分类,如:https : //scikit-learn.org/stable/modules/model_evaluation.html
我也有二进制分类数据集。请让我知道如何解决此错误。
如果需要,我很乐意提供更多详细信息。
默认情况下multi_class='raise',您需要明确更改此设置。
从文档:
multi_class {'raise', 'ovr', 'ovo'}, default='raise'
仅限多班。确定要使用的配置类型。默认值会引发错误,因此必须显式传递 'ovr' 或 'ovo'。
'ovr':计算每个类别的 AUC 与其余类别 [3] [4]。这以与多标签情况相同的方式处理多类情况。即使在 时也对类不平衡敏感
average == 'macro',因为类不平衡会影响每个“其余”分组的组成。
'ovo':计算所有可能的类别组合的平均 AUC [5]。当 时对类不平衡不敏感
average == 'macro'。
使用make_scorer(文档):
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features.
y = iris.target
from sklearn.ensemble import RandomForestClassifier
clf=RandomForestClassifier(random_state = 0, class_weight="balanced")
from sklearn.metrics import make_scorer
from sklearn.metrics import roc_auc_score
myscore = make_scorer(roc_auc_score, multi_class='ovo',needs_proba=True)
from sklearn.model_selection import cross_validate
cross_validate(clf, X, y, cv=10, scoring = myscore)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |