1、模型评估方法概述
前言:机器学习模型评估是机器学习流程中不可或缺的一环,它能帮助我们了解模型的性能,为进一步优化提供指导。评估指标的选择、数据的准备和处理、评估模型的建立和优化等都是评估过程中需要解决的关键问题。随着机器学习应用领域的不断扩展,模型评估方法也变得更为重要。
1.1特征工程
特征工程是指从原始数据中提取有用特征的过程。这些特征可用于建立机器学习模型,并能够使模型在未知数据上的表现性能达到最优。
机器学习模型评估中的特征工程主要包括以下三个部分:
1、特征构造:从原始数据中构建新的特征。这需要研究真实的数据样本,理解问题的形式和数据结构,并思考如何更好地将这些特征应用到预测模型中。
2、特征选择:选择对模型最有用或最相关的特征。这通常涉及对数据集进行选择,以排除那些与模型目标不相关的特征。
3、特征降维:如果数据集中存在过多的特征,这可能会使模型复杂化,并可能导致过拟合。因此,通过降维,我们可以将数据集的维度降低到更易于处理和解释的水平。这通常涉及将多个特征合并为单个特征,例如通过主成分分析(PCA)或线性判别分析(LDA)。
1.2混淆矩阵
混淆矩阵用于评估模型的性能,它是一个矩阵,通常用于展示分类器预测结果和实际标签之间的对应关系。混淆矩阵可以帮助我们计算出各种评估指标,如准确率、召回率、精确率、F1值等,同时还可以通过观察混淆矩阵了解分类模型在各种情况下的分类表现。
准确率: 准确率是所有样本中预测正确的样本数占总样本数的比例。在混淆矩阵中,准确率可以理解为所有单元格中的正确预测数(TPR+TNR)占总数(N)的比例。计算公式为:Accuracy = (TP+TN) / N。准确率适用于样本不平衡的情况,但是不能处理类别不平衡的问题。
召回率: 召回率又称为真正率或灵敏度,它表示的是所有实际为正的样本中被正确预测为正的样本数所占的比例。在混淆矩阵中,召回率可以理解为所有实际为正的样本中预测为正的样本数(TP)占实际为正的样本数(FN+TP)的比例。计算公式为:Recall = TP / (FN+TP)。召回率适用于关注负样本被误判为正样本的情况。
精确率: 精确率又称为真阳性率或查准率,它表示的是所有预测为正的样本中被实际为正的样本数所占的比例。在混淆矩阵中,精确率可以理解为所有预测为正的样本中实际为正的样本数(TP)占预测为正的样本数(FP+TP)的比例。计算公式为:Precision = TP / (FP+TP)。精确率适用于关注正样本被误判为负样本的情况。
F1值: F1值是准确率和召回率的调和平均值,它综合考虑了准确率和召回率的表现。在混淆矩阵中,F1值可以理解为所有单元格中正确预测数(TP)占总数(N)的比例。计算公式为:F1 Score = 2 * (Precision * Recall) / (Precision + Recall)。F1值适用于处理类别不平衡的问题,并且在准确率和召回率之间取得了平衡。
2、模型评估方法实战
需要导入的包:
from distutils.log import error
import matplotlib
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
from sklearn. model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve
from sklearn.linear_model import LogisticRegression
加载数据集进行训练:
# 使用Sklearn提供的乳腺癌数据集
data = load_breast_cancer()
X = data.data
y = data.target
# 划分训练集和测试集数据
X_train,X_test,y_train, y_test = train_test_split(X,y,test_size=0.3)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# predict_proba的输出是每个类别的概率,对于二分类问题,它的形状始终是(n_sample,2)
scores = model.predict_proba(X_test)
2.1绘制PR曲线
PR曲线的绘制步骤如下:
- 准备数据:计算每个阈值下的精度和召回率。
- 设定坐标轴:将召回率作为X轴,精度作为Y轴。
- 绘制曲线:将不同阈值下的精度和召回率点连接成线。
- 分析曲线:观察曲线的形状、趋势以及最高点位置,了解模型的整体性能。
代码:
plt.figure("P-R Curve")
plt.title('Precision/Recall Curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
# precision_recall_curve的输入为:
# y_test:二进制标签
# scores:估计的概率
# pos_label:正类的标签
# 计算不同的阈值的查全率和查准率,此实现仅限于二进制分类任务
precision, recall, thresholds = precision_recall_curve(y_test, scores[:,-1],pos_label=1)
plt.plot(recall,precision)
plt.show()
运行结果:
2.2绘制ROC曲线
ROC曲线的绘制步骤如下:
- 根据样本标签计算正负样本的数量,假设正样本数量为P,负样本数量为N。
- 分类结果一般为概率,按照概率大小从大到小进行排序。
- 将分类阈值设置到正无穷,此时所有样例均为反例,坐标为(0,0)。
- 然后将分类阈值设为每个样例的预测值,即依次将每个样例划分为正例。
- 设前一个坐标为(x,y),当前若为真正例,则对应标记点坐标为(x, 1/P);若当前为假正例,则对应标记点的坐标为(x+1/N, y)。
- 使用线段将相邻点连接即可。
代码:
plt.figure("ROC Curve")
plt.title('TPR/FPR Curve')
plt.xlabel('FPR')
plt.ylabel('TPR')
# roc_curve的输入为:
# y: 样本标签
# scores: 模型对样本属于正例的概率输出
# pos_label: 标记为正例的标签,本例中标记为1的即为正例
fpr,tpr, thresholds = metrics.roc_curve(y_test,scores[:,-1],pos_label=1)
plt.plot(fpr,tpr)
plt.show()
运行结果:
3、模型评估方法总结
3.1PR曲线的优点
- 直观:P-R曲线以概率和召回率为指标,能够直观地展示分类器在不同阈值下的性能表现。
- 考虑了正负样本的占比:P-R曲线不受样本分布(如正类与负类的占比)的影响,能够更全面地评估分类器的性能。
- 可视化性能:P-R曲线可以绘制在同一个坐标系下,方便比较不同分类器的性能。
- 包含多个性能指标:P-R曲线可以转化为多个性能指标,如准确率、召回率、F1值等,为分类器性能评估提供更多信息。
3.2ROC曲线的优点
- 简单直观:ROC曲线可以直接绘制在二维图形中,通过观察曲线的形状可以直观地评估分类器的性能。
- 全面反映性能:ROC曲线由灵敏度和特异度(1-特异度)绘制而成,可以全面反映分类器在不同阈值下的性能表现,以及对于不同分类重要性(或风险)的样本的识别能力。
- 不受类别不平衡影响:ROC曲线法通过绘制不同阈值下的真假阳性率和真假阴性率,来评估分类器的性能,不会受到类别不平衡的影响。
- 可用于评估多分类器:ROC曲线不仅可以用于评估二分类器的性能,也可以通过计算多个阈值下的灵敏度和特异度,用于评估多分类器的性能。
- 独立于数据分布:ROC曲线法是一种基于统计的方法,它对数据的分布不作特定要求,因此可以应用于不同类型的数据分布。
- 提供全局性能信息:ROC曲线提供了关于分类器整体性能的信息,而不仅仅是单个样本点的性能评估。
3.3总结
本文总结了机器学习模型评估方法的重要性和应用价值,并介绍了一些实用的评估方法和技巧。通过阅读本文,读者可以了解到不同的模型评估方法和应用场景,并学习到一些实用的技巧和经验。