🏷️🏷️首先我们显了解几个概念:
用表格可能更好理解
例子:
样本集中有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正例,则:
模型 A: 预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本
模型 B: 预测对了 6 个恶性肿瘤样本,1个良性肿瘤样本
我们会发现:TP+FN+FP+TN = 总样本数量
精准率也叫做查准率,指的是对正例样本的预测准确率。比如:我们把恶性肿瘤当做正例样本,则我们就需要知道模型对恶性肿瘤的预测准确率。
例子:
样本集中有 6 个恶性肿瘤样本,4 个良性肿瘤样本,我们假设恶性肿瘤为正例,则:
模型 A: 预测对了 3 个恶性肿瘤样本,4 个良性肿瘤样本
模型 B: 预测对了 6 个恶性肿瘤样本,1个良性肿瘤样本
召回率也叫做查全率,指的是预测为真正例样本占所有真实正例样本的比重。例如:我们把恶性肿瘤当做正例样本,则我们想知道模型是否能把所有的恶性肿瘤患者都预测出来。
💡💡如果我们对模型的精度、召回率都有要求,希望知道模型在这两个评估方向的综合预测能力如何?则可以使用 F1-score 指标。
ROC 曲线:我们分别考虑正负样本的情况:
✒️✒️根据不同的阈值计算数据集不同的TPR和FPR
ROC 曲线图像中,4 个特殊点的含义:
✒️✒️AUC 值主要评估模型对正例样本、负例样本的辨别能力
sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
'''
y_true:真实目标值
y_pred:估计器预测目标值
labels:指定类别对应的数字
target_names:目标类别名称
return:每个类别精确率与召回率
'''
from sklearn.metrics import roc_auc_score
sklearn.metrics.roc_auc_score(y_true, y_score)
计算ROC曲线面积,即AUC值
y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
y_score:预测得分,可以是正例的估计概率、置信值或者分类器方法的返回值
在现实环境中,采集的数据(建模样本)往往是比例失衡的。比如:一个用于模型训练的数据集中,A 类样本占 95%,B 类样本占 5%。
类别的不平衡会影响到模型的训练,所以,我们需要对这种情况进行处理。处理的主要方法如下:
✒️✒️这里我们介绍一个机器学习中常用的解决方案:LR自带参数,感兴趣的可以去学习一下imbalance-learn,其针对过采样和欠采样采取不同的解决方案
📌处理不均衡的数据 class_weight=“balanced” 参数 根据样本出现的评论自动给样本设置权重 ,在后期学习设置训练集和测试集中的正负样本时或更复杂的分类,设置权重都是非常重要的步骤
# 处理不均衡的数据
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
iris = datasets.load_iris()
# 移走40个数据,使数据不均衡
features = iris.data[40:, :]
target = iris.target[40:]
target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
# 打标签
target = np.where((target == 0), 0, 1)
target
# 标准化数据
scaler = StandardScaler()
features_standardized = scaler.fit_transform(features)
# class_weight="balanced" 参数 根据样本出现的评论自动给 样本设置 权重
logistic_regression = LogisticRegression(random_state=0, class_weight="balanced")
model = logistic_regression.fit(features_standardized, target)
1、当样本分布不均衡时,使用准确率(accuracy_score)进行模型评估不能反应模型真实效果
2、通过混淆矩阵, 可以计算出精准率, 召回率,F1Score等指标
3、通过ROC曲线可以计算出AUC指标