机器学习模型评估

一、模型评估的简单介绍

1.1模型评估的概念

        模型评估指标是用于量化机器学习模型在处理数据时表现的指标。它们帮助我们理解模型的性能、准确度和泛化能力,并且可以用于比较不同模型之间的优劣,它们对于了解模型在解决特定问题时的表现至关重要。基本作用包括一下几点

        衡量模型性能:评价指标提供了一种标准化的方式来量化模型的性能,使我们能够对模型的表现进行客观的比较和评估。

        指导模型选择:通过比较不同模型的评价指标,可以帮助选择最适合特定任务的模型。例如,在分类问题中,准确率高的模型通常被认为是更好的选择,而在异常检测等不平衡数据集上,精确率和召回率可能更为重要。

        识别模型问题:评价指标可以帮助识别模型存在的问题或局限性。例如,如果模型的召回率很低,可能意味着模型在识别某些类别时存在困难。

        优化模型:通过监控评价指标的变化,可以指导模型的优化过程。例如,针对某些指标较差的问题,可以采取针对性的改进措施,如调整模型参数、增加数据样本等。

        解释模型行为:评价指标可以帮助解释模型的行为和决策过程。例如,通过分析混淆矩阵可以了解模型在不同类别上的表现,从而识别模型在哪些类别上容易混淆。

 1.2混淆矩阵和常见的分类模型评估指标

1.2.1混淆矩阵

混淆矩阵(Confusion Matrix)是一种用于衡量分类模型性能的矩阵,它将模型预测的结果与实际的真实标签进行对比,并将结果分类为四种不同的情况:真正例(True Positive,TP)、真负例(True Negative,TN)、假正例(False Positive,FP)和假负例(False Negative,FN)。

混淆矩阵的一般形式如下:

                 预测值

真实值

正类别负类别
正类别TPFN
负类别FPTN
  • 真正例(True Positive,TP):模型正确地预测了正类别样本。

  • 真负例(True Negative,TN):模型正确地预测了负类别样本。

  • 假正例(False Positive,FP):模型错误地将负类别样本预测为正类别。

  • 假负例(False Negative,FN):模型错误地将正类别样本预测为负类别。

1.2.2常见的分类模型评估指标

1. 准确率(Accuracy):是模型正确预测的样本数量与总样本数量的比率。它是最常见的评估指标之一,但在不平衡数据集中可能不够准确

Accuracy = (TP+TN)/(TP+FN+FP+TN)

2. 精确率(Precision):是被模型预测为正类别的样本中,实际为正类别的比率。它衡量了模型的预测中有多少是真正正确的。

Precision = (TP)/(TP+FP)

3. 召回率(Recall):是实际为正类别的样本中,被模型正确预测为正类别的比率。它衡量了模型识别出所有真正正例的能力。

Recall = TP/(TP+FN)

4. F1 分数(F1 Score):是精确率和召回率的调和平均数,综合了两者的性能。当需要同时考虑精确率和召回率时,F1 分数是一个很好的选择。

5. ROC 曲线和 AUC(Receiver Operating Characteristic curve and Area Under the Curve):ROC 曲线是以假阳性率(False Positive Rate)为横轴,真阳性率(True Positive Rate)为纵轴绘制的曲线,AUC 则是 ROC 曲线下的面积,用于度量分类器的性能。AUC 值越大,分类器性能越好.

 ROC曲线和PR曲线的异同:ROC 曲线基于真阳性率(TPR,召回率的另一种称呼)和假阳性率(FPR)绘制,而 P-R 曲线基于精确率(Precision)和召回率(Recall)绘制。这两者都提供了一个随着阈值变化而变化的视角。在使用 P-R 曲线和 ROC 曲线时,我们通常会关注曲线下面积(AUC),AUC 值越接近于1,表示模型性能越好。 P-R 曲线和 ROC 曲线都是评估模型性能的重要工具,选择使用哪一个取决于具体的应用场景和对模型性能的关注点。

二、代码的实际演示

2.1代码展示

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.metrics import precision_recall_curve, roc_curve

# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 分割数据为训练集和测试集
split_ratio = 0.8
split_index = int(split_ratio * len(X))
train_data, test_data = X[:split_index], X[split_index:]
train_lable, test_lable = y[:split_index], y[split_index:]

#让plt。show显示的图中title能显示中文而不是乱码
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False


# 用于每个数据计算欧式距离
def distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

def knn(train_data, train_lable, test_data, k):
    # 计算所有的训练数据和测试数据的欧式距离
    distances = [distance(test, train) for test in test_data for train in train_data]

    # 将distance中的元素从小到大排列,返回其对应的索引
    min_distance = np.argsort(distances)[:k]

    k_nearest_labels = [train_lable[i] for i in min_distance]
    prediction = np.mean(k_nearest_labels)  # 取k个最近样本的平均值作为预测值
    return prediction

# 计算预测结果
predictions = [knn(train_data, train_lable, np.array([test]), k=3) for test in test_data]

# 使用sklearn中的函数计算P-R曲线和ROC曲线
precision, recall, _ = precision_recall_curve(test_lable, predictions)
fpr, tpr, _ = roc_curve(test_lable, predictions)

# 绘制P-R曲线和ROC曲线
plt.figure(figsize=(10, 5))

# P-R曲线
plt.subplot(1, 2, 1)
plt.plot(recall, precision, marker='o')
plt.title('P-R曲线')
plt.xlabel('召回率')
plt.ylabel('精确率')

# ROC曲线
plt.subplot(1, 2, 2)
plt.plot(fpr, tpr, marker='o')
plt.title('ROC曲线')
plt.xlabel('假阳性率')
plt.ylabel('真阳性率')

plt.show()

首先依据上一次实验所写的KNN算法,加以修改,通过用make_classification来生产数据集,make_classification 函数用于生成一个具有指定特征数量、样本数量和类别数量的合成数据集。在这里,n_samples=1000 表示生成1000个样本,n_features=20 表示每个样本有20个特征,n_classes=2 表示数据集有2个类别。random_state=42 是一个随机种子,用于确保每次运行代码时生成的数据集都是一致的。

然后,数据集被按照指定的比例 split_ratio 分割为训练集和测试集。在这里,split_ratio = 0.8 表示80%的数据用于训练,20%的数据用于测试。split_index 计算了分割索引,将数据按照这个索引进行切分。

最后,将生成的数据集 X 和对应的标签 y 分割成训练集和测试集。train_data 和 train_label 是训练集的特征和标签,test_data 和 test_label 是测试集的特征和标签。

这样,我们就得到了用于训练和测试的数据集。在训练集上训练模型,在测试集上评估模型的性能。

2.2效果图展示

K = 3时的PR曲线和ROC曲线

K = 5时的PR曲线和ROC曲线

三、总结

通过绘制 P-R 曲线和 ROC 曲线,我们能够全面了解模型在不同阈值下的表现,包括精确率、召回率、真阳性率和假阳性率等指标。这使我们能够更好地理解模型的优势和不足,有针对性地进行调优和改进,我们可以选择最适合任务需求的模型和阈值。如果任务更注重精确率或召回率,我们可以根据曲线的形状选择合适的模型和阈值,从而提高模型的效果。通过实验,深刻认识到了模型评估的重要性,了解到了不同评估指标的含义和用途。同时,实验过程也让我们更加熟悉了机器学习模型的训练、评估和调优流程,提升了对机器学习的理解和应用能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值