2.4 sklearn中的metrics.roc_auc_score评价指标

文章目录

      • 引言
      • 官方案例
      • 案例

引言

from sklearn.metrics import roc_auc_score

roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None,
 max_fpr=None, multi_class='raise', labels=None)
 计算曲线ROC的面积

 - Parameters(参数)
	y_true : array-like of shape (n_samples,) or (n_samples, n_classes)
	真实数据
	二分类和多分类需要带有shape (n_samples)的标签,而多标签情况需要带有shape (n_samples, n_classes)
	的二进制标签。

	y_score : array-like of shape (n_samples,) or (n_samples, n_classes)
	预测结果数据
	1.在二分类的情况下,它对应于形状数组(n_samples,),可以提供概率估计和非阈值决策值
	概率估计值对应于具有更大标签的类别的概率,即estimator.classes_ [1],
	因此是estimator.predict_proba(X,y)[:, 1]。
	决策值对应于estimator.decision_function(X,y)的输出。
	2.在多分类情况下,它对应于由predict_proba方法提供的概率估计的形状数组(n_samples,n_classes)
	每个sample概率估计值为1;此外,每一个sample的概率估计值的顺序必须与y_true中标签的顺序相对应。
	3.在多标签情况下,它对应于一个形状数组(n_samples,n_classes)。
	概率估计由predict_proba方法提供,非阈值决策值由decision_function方法提供。

	average : {‘micro’, ‘macro’, ‘samples’, ‘weighted’} or None, default=’macro’
	当y_true是二进制时,这个参数将被忽略
	'macro':简单地计算 binary metrics (二分指标)的平均值,赋予每个类别相同的权重
	'micro':给每个 sample-class pair (样本类对)对 overall metric (总体指数)
	(sample-class 权重的结果除外) 等同的贡献。除了对每个类别的 metric 进行求和之外,这
	个总和构成每个类别度量的 dividends (除数)和 divisors (除数)计算一个整体商。 在 
	multilabel settings (多标签设置)中,Micro-averaging 可能是优先选择的,包括要忽略 
	majority class (多数类)的 multiclass classification (多类分类)
	'weighted': 通过计算其在真实数据样本中的存在来对每个类的 score 进行加权的 binary metrics (二分指标)
	的平均值来计算类不平衡。
	'samples':仅适用于多标签问题。它不计算每个类别的 measure,而是计算评估数据中的每个样本
	的真实和预测类别的 metric (指标),并返回 (sample_weight-weighted) 加权平均。
	sample_weight :array-like of shape (n_samples,), default=None
	样品权重

	sample_weight : array-like of shape (n_samples,), default=None
	如果不为None,则返回范围为[0,max_fpr]的标准化部分AUC
	对于多分类情况,max_fpr应该等于None1.0

	multi_class:{raise, ‘ovr’, ‘ovo’}, default=raise’
	仅用于多分类,默认值会引发错误,因此必须显式传递'ovr''ovo'
	'ovr':一对多
	'ovo':一对一
	这两个概念想了解的参考为2.逻辑回归部分

	labels : array-like of shape (n_classes,), default=None	
	仅用于多分类,标签列表索引了y_score中的类,如果为None,则使用y_true中标签的数字或字典顺序

 - 返回
	AUC值

官方案例

二分类情况

>>> from sklearn.datasets import load_breast_cancer
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.metrics import roc_auc_score
>>> X, y = load_breast_cancer(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X)[:, 1])
0.99...
>>> roc_auc_score(y, clf.decision_function(X))
0.99...

多分类情况

>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear").fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr')
0.99...

多标签情况

>>> from sklearn.datasets import make_multilabel_classification
>>> from sklearn.multioutput import MultiOutputClassifier
>>> X, y = make_multilabel_classification(random_state=0)
>>> clf = MultiOutputClassifier(clf).fit(X, y)
>>> # get a list of n_output containing probability arrays of shape
>>> # (n_samples, n_classes)
>>> y_pred = clf.predict_proba(X)
>>> # extract the positive columns for each output
>>> y_pred = np.transpose([pred[:, 1] for pred in y_pred])
>>> roc_auc_score(y, y_pred, average=None)
array([0.82..., 0.86..., 0.94..., 0.85... , 0.94...])
>>> from sklearn.linear_model import RidgeClassifierCV
>>> clf = RidgeClassifierCV().fit(X, y)
>>> roc_auc_score(y, clf.decision_function(X), average=None)
array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])

案例

import numpy as np
# 模型评估
from sklearn import metrics

if __name__ == '__main__':
    y = np.array([0, 0, 1, 1])
    y_pred = np.array([0.1, 0.5, 0.3, 0.8])

    # 返回三个数组结果分别是fpr(假正率),tpr(召回率),threshold(阈值)
    # 参数为真实结果数据、预测结果数据(可以是标签数据也可以是概率值)
    fpr, tpr, threshold = metrics.roc_curve(y, y_pred)
    # 计算AUC的值
    auc = metrics.auc(fpr, tpr)
    print(auc)
    print(metrics.roc_auc_score(y, y_pred))

0.75
0.75

当碰到多分类情况时,可以使用one-hot编码,在进行ravel()展平操作,来使用

auc = roc_auc_score(y_one_hot.ravel(), y_score.ravel())

如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!
在这里插入图片描述


你可能感兴趣的:(#,机器学习理论与实战,roc_auc_score)