分类算法的评估方法(ROC曲线和AUC指标)

ROC曲线和AUC指标
    1.ROC曲线:
        以FRP为横坐标、以TRP为纵坐标作的曲线。
        FRP:相当于召回率,就是在真实正例样本中,预测值为正例的个数所占的比例。
        TPR:相当于在真实反例样本中,预测值为正例的个数所占的比例
    2.AUC指标:
        AUC指标和ROC曲线有一定的关系,AUC的就是ROC曲线和X轴相交时的距离。
        1.当AUC=0.5时,这说明,分类器是一个随机分类,是不负责任的分类器。分类效果非常差。
        2.当AUC=1.0时,这说明,分类器是一个完美的分类器。分类效果极好。
        3.当0.5 ROC曲线和AUC指标适用的场景:
    当样本指标存在样本不均衡时,会使得精确率、召回率和F1-score的值都非常大。这时,采用ROC曲线和AUC指标进行判断,如果值也比较大,那么恰恰说明,这个分类器是非常好的分类器。但是,如果采用ROC曲线和AUC指标得到的结果非常差的话,这就说明,样本很不均衡,同时分类器是一个非常不负责任的分类器。而且注意的是,ROC曲线和AUC指标只适用于二分类问题。
ROC曲线和AUC指标对应的API
    1. ROC曲线fpr, tpr, thresholds = sklearn.metrics.roc_curve(y_true, y_score)
        y_true: 真实值,相当于y_test,但是只能是0-1分级的才对。
        y_score:可以是预测值,相当于y_predict
        return:
            返回的是不同阈值下的fpr和tpr
    2.ROC曲线绘制sklearn.metrics.plot_roc_curve(estimator, X, y)
        estimator: 这里是直接把实例化好的分类器丢到里面
        X: 相当于x_test
        y: 相当于y_test
    2. AUC指标sklearn.metrics.roc_auc_score(y_true, y_score)
        y_true: 真实值,相当于y_test,但是只能是0-1分级的才对。
        y_score:可以是预测值,相当于y_predict

代码:

# 对乳腺癌进行分类和评估(通过ROC曲线和AUC指标)
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, plot_roc_curve # 用来绘制ROC曲线
from sklearn.metrics import roc_auc_score # 用来计算AUC指标
from sklearn.metrics import classification_report
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression



# 1)数据集获取
data = load_breast_cancer()
# 2)数据集分离
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
# 3)特诊工程标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4)逻辑回归流程
# 注意,这里可以采用网格搜索和交叉验证来进行出来,找到合适的estimator
estimator = LogisticRegression(solver='liblinear', penalty='l2', C=1.0)
estimator.fit(x_test, y_test)
estimator.coef_, estimator.intercept_
# 准确率
estimator.score(x_test, y_test)

# 5)精确率、召回率、F1-score
report = classification_report(y_test, estimator.predict(x_test), labels=[0, 1], target_names=['良性', '恶性'])
print(report)
# 6)ROC曲线和AUC指标
print(roc_curve(y_test, estimator.predict(x_test)))
print(roc_auc_score(y_test, estimator.predict(x_test)))
plot_roc_curve(estimator,x_test, y_test)
plt.show()

输出结果:

              precision    recall  f1-score   support

          良性       0.98      0.93      0.95        55
          恶性       0.96      0.99      0.97        88

    accuracy                           0.97       143
   macro avg       0.97      0.96      0.96       143
weighted avg       0.97      0.97      0.96       143

(array([0.        , 0.07272727, 1.        ]), array([0.        , 0.98863636, 1.        ]), array([2, 1, 0]))
0.9579545454545455

分类算法的评估方法(ROC曲线和AUC指标)_第1张图片

学习地址:

黑马程序员3天快速入门python机器学习_哔哩哔哩_bilibili

你可能感兴趣的:(机器学习,分类,人工智能,机器学习,sklearn,python)