机器学习 模型评估

目录

一、混淆矩阵

1、混淆矩阵的含义

2、混淆矩阵的案例

3、混淆矩阵的分类评估指标

二、ROC曲线

1、ROC曲线的含义

2、ROC曲线的绘制

三、PR曲线

1、PR曲线的含义

四、尝试进行模型评估

1、ROC曲线

五、总结


一、混淆矩阵

1、混淆矩阵的含义

        混淆矩阵(Confusion Matrix)是用于衡量分类模型性能的一种矩阵形式的工具。它将模型预测的结果与真实的分类结果进行对比,以评估模型的准确性。

        在二分类问题中,混淆矩阵的四个元素分别表示:

True Positive(真正例):模型正确地将正例(Positive)分类为正例。

False Positive(假正例):模型错误地将负例(Negative)分类为正例。

False Negative(假反例):模型错误地将正例分类为负例。

True Negative(真反例):模型正确地将负例分类为负例。

        二分类问题中混淆矩阵通常是一个2x2的矩阵,但在多分类问题中也可以是一个NxN的矩阵,其中N表示类别的数量。通过观察混淆矩阵,可以计算出一些评估指标,包括准确率、精确率、召回率和F1值等,从而对分类模型的性能进行评估和比较,帮助我们了解分类模型在不同类别上的预测情况,更好地理解模型的性能和误差来源,以便进行模型改进和优化。

2、混淆矩阵的案例

        假设有一个二分类模型用于预测某个人是否患有某种疾病。用此模型对100个人进行了预测,并将其结果与实际情况进行对比,得到以下混淆矩阵:

在这个混淆矩阵中,可以看到:

真正例(TP):模型正确地将25个患病的人预测为患病。

假正例(FN):模型错误地将10个健康的人预测为患病。

假反例(FP):模型错误地将5个患病的人预测为健康。

真反例(TN):模型正确地将60个健康的人预测为健康。

通过该混淆矩阵,可以计算出准确率、精确率、召回率和F1值等评估指标来评估模型的性能。

3、混淆矩阵的分类评估指标

        在混淆矩阵的基础上,可以计算出一些延伸的评价指标来更全面地评估分类模型的性能。以下是一些常见的延伸评价指标:

  1. 准确率(Accuracy):准确率是指分类正确的样本数占总样本数的比例。计算公式为:准确率 = (TP + TN) / (TP + TN + FP + FN)。在案例中,就可以得到模型的准确率为:(25+60)/100=0.85。

  2. 精确率(Precision):精确率是指被模型预测为正例的样本中实际为正例的比例。计算公式为:精确率 = TP / (TP + FP)。在案例中,就可以得到模型的精确率为:25/(25+5)=0.833。

  3. 召回率(Recall):召回率是指实际为正例的样本中被模型预测为正例的比例。计算公式为:召回率 = TP / (TP + FN)。在案例中,就可以得到模型的召回率为:25/(25+10)=0.714。

  4. F1 值(F1-score):F1 值是精确率和召回率的调和平均值,用于综合考虑精确率和召回率。计算公式为:F1 值 = 2 * (精确率 * 召回率) / (精确率 + 召回率)。在案例中,就可以得到模型的F1值为:2 * (0.833 * 0.714)/(0.833 + 0.714)= 0.769。

二、ROC曲线

1、ROC曲线的含义

        ROC曲线(Receiver Operating Characteristic curve)是一种用于评估二分类模型性能的工具。ROC曲线的横轴为假阳性率,表示模型在负例中错误地预测为正例的比例,纵轴为真阳性率,表示模型在正例中正确预测为正例的比例,即召回率。

        ROC曲线主要用于评估二分类模型的性能,常用的评估指标包括:

  1. AUC:ROC曲线下的面积,范围在0到1之间。AUC值越大,表示模型的性能越好。

  2. 真阳性率:表示被正确预测为正例的样本占所有正例样本的比例。计算公式为:TPR = TP / (TP + FN)。

  3. 假阳性率:表示被错误预测为正例的负例样本占所有负例样本的比例。计算公式为:FPR = FP / (FP + TN)。

  4. 特异度:表示被正确预测为负例的样本占所有负例样本的比例。计算公式为:Specificity = 1 - FPR。

        这些指标可以通过绘制ROC曲线并计算曲线下的面积来评估模型的性能。 AUC值越接近1,表示模型具有较高的性能,而指标TPR、FPR和Specificity则展示了模型在不同分类阈值下的性能表现。

       在ROC曲线上,模型表现良好的点位于左上角,模型表现较差的点位于右下角,曲线下方的面积越大,表示模型性能越好,通过计算ROC曲线下的面积来定量评估模型的性能,AUC的取值范围在0到1之间,值越大表示模型性能越好。

2、ROC曲线的绘制

  1. 使用模型对测试集中的样本进行预测,并得到每个样本的预测概率或分类结果。

  2. 根据预测结果,计算不同阈值下的真阳性率(True Positive Rate,也称为灵敏度或召回率)和假阳性率(False Positive Rate)。

  3. 绘制ROC曲线。将不同阈值下的FPR作为横轴,TPR作为纵轴,绘制出ROC曲线。

以下为python绘制ROC曲线的简单实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc

# 模型的预测结果和真实标签
y_true = np.array([0, 0, 1, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.9])

# 计算真阳性率和假阳性率
fpr, tpr, thresholds = roc_curve(y_true, y_scores)

# 计算AUC值
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假阳性率')
plt.ylabel('真阳性率')
plt.title('ROC曲线')
plt.legend(loc="lower right")
plt.show()

三、PR曲线

1、PR曲线的含义

        PR曲线(Precision-Recall Curve)是一种用于评估二分类模型性能的曲线。与ROC曲线不同,PR曲线以召回率为横轴,精确率为纵轴进行绘制,精确率衡量了模型预测为正例的准确性,召回率衡量了模型对正例的识别能力。

        PR曲线在模型的预测结果中找到一个平衡点,使得模型既能保持较高的精确率,又能保持较高的召回率。在实际应用中,可以根据具体需求选择适当的阈值来调整模型的预测结果。

2、PR曲线的绘制

        绘制PR曲线的步骤与绘制ROC曲线类似,需要计算不同阈值下的精确率和召回率。然后将这些精确率和召回率绘制成曲线,可以通过AUC来评估模型的性能,AUC越大表示模型性能越好。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve

# 随机生成测试数据
y_true = np.random.randint(0, 2, size=1000)
y_scores = np.random.rand(1000)
# 注意:这里需要根据实际情况替换y_true和y_scores

# 计算精确率和召回率
precision, recall, _ = precision_recall_curve(y_true, y_scores)

# 绘制PR曲线
plt.plot(recall, precision, label='PR Curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')

plt.legend()
plt.show()

四、尝试进行模型评估

1、ROC曲线

对KNN算法进行模型评估,并绘制ROC曲线和计算AUC。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score

# 生成随机的测试数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 预测概率
y_prob = knn.predict_proba(X_test)[:, 1]

# 计算ROC曲线和AUC的值
fpr, tpr, thresholds = roc_curve(y_test, y_prob)
auc = roc_auc_score(y_test, y_prob)

# 绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (AUC = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--', label='RG')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.title('ROC')
plt.legend(loc="lower right")
plt.show()

2、PR曲线

对KNN算法进行模型评估,并绘制PR曲线和计算AUC。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_recall_curve, average_precision_score

# 生成随机的测试数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 预测概率
y_prob = knn.predict_proba(X_test)[:, 1]

# 计算精确率和召回率
precision, recall, thresholds = precision_recall_curve(y_test, y_prob)
auc = average_precision_score(y_test, y_prob)

# 绘制PR曲线
plt.plot(recall, precision, label='PR curve (AUC = %0.2f)' % auc)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('PR')
plt.legend(loc="lower right")
plt.show()

五、总结

        ROC曲线和PR曲线都是机器学习中常用来评估分类模型性能的工具,它们都针对二分类问题。ROC曲线以真阳率为纵轴,假阳率为横轴,展示了在不同分类阈值下,模型的真阳率和假阳率之间的权衡关系。AUC表示ROC曲线下的面积,用于比较不同模型的性能。ROC曲线适用于处理数据不平衡的情况,但在正样本数量较少时,可能会给出不准确的结果。PR曲线以召回率为纵轴,精确率为横轴。PR曲线更适用于处理数据不平衡的情况,因为它不受真阴率的影响。PR曲线的AUC与ROC曲线中的AUC不同,PR曲线的AUC的取值范围是0到1,1表示模型性能最佳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值