中升乙源建设工程有限公司网站,中国十大建设集团,怎么注册一个网站,专业的网站建设价格在机器学习深度学习算法模型大开发过程中#xff0c;免不了要对算法模型进行对应的评测分析#xff0c;这里主要是总结记录分类任务中经常使用到的一些评价指标#xff0c;并针对性地给出对应的代码实现#xff0c;方便读者直接移植到自己的项目中。 【混淆矩阵】
混淆矩阵…在机器学习深度学习算法模型大开发过程中免不了要对算法模型进行对应的评测分析这里主要是总结记录分类任务中经常使用到的一些评价指标并针对性地给出对应的代码实现方便读者直接移植到自己的项目中。 【混淆矩阵】
混淆矩阵Confusion Matrix是评价分类模型性能的一种常用工具它展示了模型的预测结果与真实标签之间的关系。混淆矩阵是一个二维矩阵行表示真实标签列表示模型的预测结果。
混淆矩阵的原理如下
假设我们有一个二分类模型类别分别为正例和负例。混淆矩阵的四个元素分别表示
真正例True PositiveTP模型将正例正确地预测为正例的数量。假正例False PositiveFP模型将负例错误地预测为正例的数量。假负例False NegativeFN模型将正例错误地预测为负例的数量。真负例True NegativeTN模型将负例正确地预测为负例的数量。
下面是一个示例混淆矩阵 预测结果| 正例 | 负例 |
真实标签 正例 | TP | FN |负例 | FP | TN |
混淆矩阵的优点
提供了对分类模型性能的全面评估可以直观地展示模型的预测结果和错误类型。可以计算多种评价指标如准确率、精确率、召回率等从不同角度分析模型的性能。
混淆矩阵的缺点
只适用于分类任务对于回归任务无法直接使用。当类别数量较多时混淆矩阵会变得更加复杂不易直观解读。
Demo代码实现如下所示
import numpy as np
from sklearn.metrics import *# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果
predicted_labels [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]# 计算混淆矩阵
cm confusion_matrix(true_labels, predicted_labels)
print(Confusion Matrix:)
print(cm) 【准确率】
准确率Accuracy是评价分类模型性能的常用指标之一它表示模型正确分类的样本数量与总样本数量之间的比例。
准确率的计算公式为
准确率 (TP TN) / (TP TN FP FN)
其中TP表示真正例的数量TN表示真负例的数量FP表示假正例的数量FN表示假负例的数量。
准确率的优点
直观易懂准确率可以直观地衡量模型的整体分类性能它给出的是模型正确分类的比例。平衡性准确率考虑了模型对所有类别样本的分类情况能够反映模型的整体性能。
准确率的缺点
对样本不平衡敏感当数据集中的样本分布不均衡时准确率可能会给出误导性的结果。例如在一个二分类问题中如果负样本占大多数模型只需预测为负样本即可获得很高的准确率但对于正样本的分类效果可能很差。忽略了错误类型准确率无法区分模型的错误类型无法告诉我们模型在预测中的具体偏差。
Demo代码实现如下所示
from sklearn.metrics import accuracy_score# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果
predicted_labels [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]# 计算准确率
accuracy accuracy_score(true_labels, predicted_labels)
print(Accuracy:, accuracy) 【精确率】
精确率Precision是机器学习和深度学习分类模型常用的评价指标之一它衡量的是模型在预测为正例的样本中真正为正例的比例。
精确率的计算公式为
精确率 TP / (TP FP)
其中TP表示真正例的数量FP表示假正例的数量。
精确率的优点
强调正例的准确性精确率专注于模型将负例错误预测为正例的情况它能够评估模型在预测为正例的样本中的准确性。适用于正例重要的场景在一些应用中正例的预测结果更为重要如罕见疾病的诊断。精确率可以帮助我们衡量模型在这些场景下的性能。
精确率的缺点
忽略了假负例精确率无法区分模型的假负例情况即模型将正例错误地预测为负例的情况。在一些应用中假负例的影响可能非常重要如癌症的诊断。因此仅仅使用精确率来评估模型可能会忽略这些重要的错误预测。
Demo代码实现如下所示
from sklearn.metrics import precision_score# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果
predicted_labels [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]# 计算精确率
precision precision_score(true_labels, predicted_labels)
print(Precision:, precision) 【召回率】
召回率Recall也称为灵敏度Sensitivity或真正例率True Positive Rate是机器学习和深度学习分类模型常用的评价指标之一。它衡量的是模型在所有真实正例中能够正确预测为正例的比例。
召回率的计算公式为
召回率 TP / (TP FN)
其中TP表示真正例的数量FN表示假负例的数量。
召回率的优点
关注正例的识别能力召回率可以评估模型对正例的识别能力即模型能够正确找出多少个真实正例。适用于假负例重要的场景在一些应用中假负例的影响较为重要如癌症的诊断。召回率可以帮助我们衡量模型在这些场景下的性能。
召回率的缺点
忽略了假正例召回率无法区分模型的假正例情况即模型将负例错误地预测为正例的情况。在一些应用中假正例的影响可能非常重要如垃圾邮件过滤。因此仅仅使用召回率来评估模型可能会忽略这些重要的错误预测。
Demo代码实现如下所示
from sklearn.metrics import recall_score# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果
predicted_labels [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]# 计算召回率
recall recall_score(true_labels, predicted_labels)
print(Recall:, recall) 【F1值】
F1值是机器学习和深度学习分类模型中常用的综合评价指标它同时考虑了模型的精确率Precision和召回率Recall。F1值的计算公式为
F1 2 * (Precision * Recall) / (Precision Recall)
其中精确率和召回率的计算方式如下
精确率 TP / (TP FP) 召回率 TP / (TP FN)
F1值的优点
综合考虑了精确率和召回率F1值综合了精确率和召回率可以更全面地评估模型的分类性能。它能够同时衡量模型的正例识别能力和负例识别能力对于不平衡数据集和分类任务来说是一个较好的评价指标。适用于正负样本不平衡的场景在一些分类任务中正负样本的比例可能会存在较大的不平衡。F1值对于这类场景非常有用因为它能够平衡考虑模型对正负样本的预测能力。
F1值的缺点
对精确率和召回率平衡要求较高F1值假设精确率和召回率具有相同的重要性并且对两者的平衡要求较高。在某些应用场景下精确率和召回率的重要性可能不同因此仅仅使用F1值来评估模型的性能可能会忽略这种差异。受数据分布影响较大F1值的计算受到数据分布的影响特别是在正负样本不平衡的情况下。当数据分布发生变化时F1值的结果也会随之变化因此在评估模型时需要谨慎考虑数据的分布情况。
Demo代码实现如下所示
from sklearn.metrics import f1_score# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果
predicted_labels [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]# 计算F1值
f1 f1_score(true_labels, predicted_labels)
print(F1 Score:, f1) 【ROC曲线】
ROC曲线Receiver Operating Characteristic curve是机器学习和深度学习分类模型中常用的评价指标用于衡量分类模型的性能。ROC曲线通过绘制真正例率True Positive RateTPR和假正例率False Positive RateFPR之间的关系图来评估模型的分类准确性。
TPR和FPR的计算方式如下
TPR TP / (TP FN)FPR FP / (FP TN)
其中TP表示真正例模型正确预测为正例的样本数FN表示假负例模型错误预测为负例的样本数FP表示假正例模型错误预测为正例的样本数TN表示真负例模型正确预测为负例的样本数。
ROC曲线的绘制过程如下
计算模型预测结果的置信度概率或得分。选择不同的阈值将置信度映射为二分类的预测结果。根据不同的阈值计算对应的TPR和FPR。绘制TPR-FPR曲线横轴为FPR纵轴为TPR。
ROC曲线的优点
不受分类阈值的影响ROC曲线通过绘制TPR和FPR之间的关系图不依赖于分类阈值的选择能够全面地评估模型在不同阈值下的性能。直观反映分类模型的性能ROC曲线能够直观地展示模型在正负样本之间的权衡关系帮助我们理解模型的分类能力。
ROC曲线的缺点
无法直接比较模型的性能ROC曲线可以用于比较同一模型在不同阈值下的性能但不能直接比较不同模型之间的性能差异。为了比较不同模型的性能需要使用其他指标如曲线下面积AUC。受样本分布影响较大ROC曲线的计算受到样本分布的影响特别是在正负样本不平衡的情况下。当数据分布发生变化时ROC曲线的形状和结果也会随之变化因此在评估模型时需要注意数据的分布情况。
Demo代码实现如下所示
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, roc_auc_score# 真实标签
true_labels [0, 1, 1, 0, 1, 0, 0, 1, 1, 1]
# 模型预测结果的置信度概率或得分
predicted_scores [0.2, 0.8, 0.6, 0.3, 0.7, 0.4, 0.1, 0.9, 0.7, 0.5]# 计算TPR和FPR
fpr, tpr, thresholds roc_curve(true_labels, predicted_scores)# 计算AUC
auc roc_auc_score(true_labels, predicted_scores)# 绘制ROC曲线
plt.plot(fpr, tpr, labelfAUC {auc:.2f})
plt.plot([0, 1], [0, 1], k--)
plt.xlabel(False Positive Rate)
plt.ylabel(True Positive Rate)
plt.title(Receiver Operating Characteristic (ROC) Curve)
plt.legend(loclower right)
plt.show() 【AUC值】
AUCArea Under the Curve是机器学习模型评价中常用的指标之一用于评估二分类模型的性能。AUC值表示了分类模型在不同阈值下的预测能力即正确地将正例排在负例前面的能力。AUC的取值范围在0到1之间数值越接近1表示模型的性能越好数值越接近0.5则表示模型的性能越差。
AUC的计算方法是通过绘制ROC曲线Receiver Operating Characteristic curve来得到的。ROC曲线以模型的真正例率True Positive Rate也称为召回率作为纵轴以模型的假正例率False Positive Rate作为横轴将模型在不同阈值下的表现绘制成曲线。AUC值则表示ROC曲线下的面积大小。
AUC的优点包括
对分类器的输出结果不敏感AUC值只受到模型的排序能力影响而不受到具体的分类阈值影响因此对于不同的阈值选择不敏感。适用于不平衡数据集AUC在处理不平衡数据集时比准确率Accuracy等指标更加稳定能够更好地评估模型的性能。
AUC的缺点包括
无法直接解释模型的性能AUC仅仅是对模型的排序能力进行评估无法提供模型在实际任务中的准确性。对于类别不平衡的数据集AUC可能会高估模型的性能当数据集中的正例和负例比例严重失衡时AUC可能会给出不准确的评估结果。
Demo代码实现如下所示
from sklearn.metrics import roc_auc_score# 假设y_true是真实的标签y_pred是模型的预测概率
y_true [0, 1, 0, 1]
y_pred [0.2, 0.8, 0.3, 0.6]# 计算AUC值
auc roc_auc_score(y_true, y_pred)
print(AUC:, auc) 【KS( Kolmogorov-Smirnov)曲线】
KSKolmogorov-Smirnov曲线是机器学习模型评价中常用的指标之一用于评估二分类模型的性能。KS曲线基于累积分布函数CDF的比较可以帮助我们确定最佳的分类阈值。
KS曲线的原理是通过比较正例和负例的累积分布函数来评估模型的分类能力。具体而言KS曲线以模型的预测概率作为横轴以累积正例比例和累积负例比例的差值也称为KS统计量作为纵轴绘制出模型在不同阈值下的性能曲线。KS统计量表示了模型在不同概率阈值下正例和负例之间的最大差异。
KS曲线的优点包括
直观易懂KS曲线直观地展示了正例和负例之间的差异可以帮助我们选择最佳的分类阈值。对于不平衡数据集较为敏感KS曲线能够更好地评估模型在不平衡数据集中的性能因为它关注的是正例和负例之间的差异。
KS曲线的缺点包括
无法直接解释模型的性能KS曲线仅仅是对模型在不同阈值下的分类能力进行评估无法提供模型在实际任务中的准确性。对于类别不平衡的数据集KS曲线可能会高估模型的性能当数据集中的正例和负例比例严重失衡时KS曲线可能会给出不准确的评估结果。
Demo代码实现如下所示
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve# 假设y_true是真实的标签y_pred是模型的预测概率
y_true np.array([0, 1, 0, 1])
y_pred np.array([0.2, 0.8, 0.3, 0.6])# 计算正例和负例的累积分布函数
fpr, tpr, thresholds roc_curve(y_true, y_pred)
ks np.max(np.abs(tpr - fpr))# 绘制KS曲线
plt.plot(thresholds, tpr, labelTPR)
plt.plot(thresholds, fpr, labelFPR)
plt.xlabel(Threshold)
plt.ylabel(Rate)
plt.title(KS Curve (KS {:.3f}).format(ks))
plt.legend()
plt.show() 【PR曲线】
PRPrecision-Recall曲线是机器学习分类模型中常用的性能评价指标之一用于评估二分类模型的性能。PR曲线以召回率Recall为横轴精确率Precision为纵轴描述了在不同阈值下模型的性能变化。
PR曲线的原理是通过比较模型在不同阈值下的精确率和召回率来评估模型的性能。精确率定义为模型预测为正例的样本中真正为正例的比例召回率定义为模型正确预测为正例的样本占所有真实正例样本的比例。通过改变分类阈值可以得到一系列精确率和召回率的值从而绘制PR曲线。
PR曲线的优点包括
对于不平衡数据集较为敏感PR曲线能够更好地评估模型在不平衡数据集中的性能因为它关注的是正例样本的预测准确性和召回率。直观易懂PR曲线直观地展示了模型在不同阈值下的性能变化可以帮助我们选择最佳的分类阈值。
PR曲线的缺点包括
不适用于比较不同模型PR曲线不能直接用于比较不同模型的性能因为不同模型的基准线可能不同。在比较模型性能时可以使用PR曲线下面积AUC-PR作为指标。无法直接解释模型的准确性PR曲线仅仅是对模型在不同阈值下的性能进行评估无法提供模型在实际任务中的准确性。
Demo代码实现如下所示
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve# 假设y_true是真实的标签y_pred是模型的预测概率
y_true np.array([0, 1, 0, 1])
y_pred np.array([0.2, 0.8, 0.3, 0.6])# 计算精确率和召回率
precision, recall, thresholds precision_recall_curve(y_true, y_pred)# 绘制PR曲线
plt.plot(recall, precision)
plt.xlabel(Recall)
plt.ylabel(Precision)
plt.title(PR Curve)
plt.show() 【Lift值】
Lift值是机器学习和数据挖掘领域中常用的评价指标之一用于评估分类模型的性能。Lift值可以帮助我们了解模型在不同预测概率范围内的效果相比于随机选择的效果有多好。
Lift值的原理是通过比较模型预测结果与随机选择结果之间的差异来评估模型的性能。具体而言Lift值是用模型的预测结果中正例比例与随机选择结果中正例比例的比值表示。这个比值可以告诉我们模型在不同预测概率范围内相比于随机选择的效果有多好。
Lift值的优点包括
直观易懂Lift值可以直观地表示模型的性能相对于随机选择的提升程度。可解释性Lift值可以帮助我们了解模型在不同预测概率范围内的效果对于业务场景的解释具有一定的帮助。
Lift值的缺点包括
无法直接解释模型的准确性Lift值仅仅是对模型相对于随机选择的效果进行评估无法提供模型在实际任务中的准确性。受数据分布影响较大Lift值对数据分布敏感当数据分布发生变化时Lift值的解释可能会有所变化。
Demo代码实现如下所示
import numpy as np# 假设y_true是真实的标签y_pred是模型的预测概率
y_true np.array([0, 1, 0, 1])
y_pred np.array([0.2, 0.8, 0.3, 0.6])# 将预测概率按从大到小排序
sorted_indices np.argsort(y_pred)[::-1]
sorted_y_true y_true[sorted_indices]# 计算正例比例和随机选择结果中的正例比例
positive_ratio np.cumsum(sorted_y_true) / np.sum(sorted_y_true)
random_positive_ratio np.arange(1, len(y_true) 1) / len(y_true)# 计算Lift值
lift positive_ratio / random_positive_ratioprint(Lift values:, lift) 【Kappa系数】
Kappa系数Kappa coefficient是一种用于评估分类模型性能的指标常用于衡量分类器的准确性与判断的一致性。Kappa系数考虑了分类器的准确性与随机选择之间的差异可以帮助我们判断模型的性能是否超过了随机选择的水平。
Kappa系数的原理是通过比较分类器的预测结果与真实标签之间的一致性来评估模型的性能。Kappa系数的取值范围为[-1, 1]其中1表示完全一致0表示与随机选择一样-1表示完全不一致。Kappa系数的计算考虑了分类器的预测结果与真实标签之间的一致性同时考虑了随机选择的效果。
Kappa系数的优点包括
考虑了随机选择的效果Kappa系数通过与随机选择进行比较可以帮助我们判断模型的性能是否优于随机选择的水平。对不平衡数据集较为鲁棒Kappa系数相对于准确率等指标对不平衡数据集更为鲁棒因为它考虑了分类器的预测结果与真实标签之间的一致性。
Kappa系数的缺点包括
无法解释模型的准确性Kappa系数仅仅是对分类器的一致性进行评估无法提供模型在实际任务中的准确性。受类别不平衡的影响Kappa系数对类别不平衡较为敏感当类别不平衡较为严重时Kappa系数的解释可能会受到影响。
Demo代码实现如下所示
from sklearn.metrics import cohen_kappa_score# 假设y_true是真实的标签y_pred是模型的预测结果
y_true [0, 1, 0, 1]
y_pred [0, 1, 1, 1]# 计算Kappa系数
kappa cohen_kappa_score(y_true, y_pred)print(Kappa coefficient:, kappa) 【宏平均、维平均】
宏平均Macro-average和微平均Micro-average是常用的评价分类模型性能的指标用于计算多类别分类模型的准确率、召回率和F1值等指标。
宏平均的原理是先计算每个类别的准确率、召回率和F1值然后对所有类别的指标进行平均。宏平均对每个类别都赋予了相同的权重无论类别的样本数量多少都被视为同等重要。宏平均适用于各个类别的重要性相同的情况。
宏平均的优点包括
公平性宏平均对每个类别都赋予了相同的权重能够平等对待各个类别适用于各个类别的重要性相同的情况。直观易懂宏平均计算简单对于理解模型在不同类别上的性能有一定帮助。
宏平均的缺点包括
不考虑类别的样本数量宏平均不考虑类别的样本数量差异对于样本数量不平衡的情况可能无法准确反映模型的性能。对小类别影响较大宏平均对每个类别都赋予相同的权重对于小类别的性能表现可能会被大类别的性能表现所主导。
微平均的原理是将所有类别的预测结果合并后计算准确率、召回率和F1值。微平均将所有类别的样本都视为一个整体对每个样本赋予相同的权重。微平均适用于样本数量不平衡的情况。
微平均的优点包括
考虑样本数量差异微平均将所有类别的样本视为一个整体能够考虑样本数量的差异适用于样本数量不平衡的情况。对大类别影响较大微平均对每个样本都赋予相同的权重对于大类别的性能表现可能会对整体性能有较大影响。
微平均的缺点包括
不公平性微平均将所有类别的样本都视为一个整体对每个样本赋予相同的权重可能不公平对待样本数量较少的类别。可能无法准确反映各个类别的性能由于将所有类别的样本合并计算指标微平均可能无法准确反映各个类别的性能。
Demo代码实现如下所示
from sklearn.metrics import precision_score, recall_score, f1_score# 假设y_true是真实的标签y_pred是模型的预测结果
y_true [0, 1, 0, 1]
y_pred [0, 1, 1, 1]# 计算宏平均
macro_precision precision_score(y_true, y_pred, averagemacro)
macro_recall recall_score(y_true, y_pred, averagemacro)
macro_f1 f1_score(y_true, y_pred, averagemacro)# 计算微平均
micro_precision precision_score(y_true, y_pred, averagemicro)
micro_recall recall_score(y_true, y_pred, averagemicro)
micro_f1 f1_score(y_true, y_pred, averagemicro)print(Macro Precision:, macro_precision)
print(Macro Recall:, macro_recall)
print(Macro F1:, macro_f1)
print(Micro Precision:, micro_precision)
print(Micro Recall:, micro_recall)
print(MicroF1:, micro_f1) 如果还有其他相关的指标欢迎评论区留言补充我一并补充进来。