16、模型评估与计算机视觉:从基础到应用

模型评估与计算机视觉:从基础到应用

1. 模型评估基础

在模型评估中,准确性是一个常用的指标,但当数据集不平衡时,准确性并非评估模型的最佳方法。例如,一个模型的准确率约为 87%,看似不错,但如果其零准确率(即仅预测多数类时的准确率)就高达 84%,那么 87% 的准确率就不具有显著意义,此时准确性不是评估算法的合适指标。

1.1 计算神经网络模型的准确率和零准确率

当改变训练/测试集划分时,零准确率和准确率会受到影响。以下是具体操作步骤:
1. 导入所有必要的依赖项并加载数据集。
2. 找出因变量和自变量,过滤掉无用的列,如患者 ID,因为它对因变量没有影响。
3. 为分类变量创建虚拟变量,确保输入均为数值变量,然后删除原始分类变量,用转换后的数值虚拟变量替代。
4. 将测试集大小从 0.30 改为 0.25,随机状态从 110 改为 500,使用 StandardScaler 函数对数据进行缩放,再使用 values 函数将 DataFrame 转换回 NumPy 数组。
5. 导入构建神经网络架构所需的库并初始化 Sequential 类。
6. 添加第一个 Dense 层和 Dropout 层,将 Dropout 率设置为 0.3,重复此步骤两次以避免过拟合,然后添加一个具有 sigmoid 激活函数的输出 Dense 层。
7. 编译网络,使用准确率拟合模型,设置 100 个周期和 20 的批量大小。
8. 创建两个预测变量 y_pred_class 和 y_pred_prob。
9. 设置类别预测的阈值,大于阈值(0.5)的值为 1,小于 0.5 的值为 0,使用 scikit-learn 的 accuracy_score 函数计算准确率。
10. 使用 pandas 的 value_count 函数计算零准确率。

由于内部数学运算的随机性,可能会得到略有不同的结果。

1.2 基于混淆矩阵推导和计算指标

使用相同的患者再入院数据,推导神经网络模型的灵敏度、特异度、精确度和假阳性率,并调整阈值重新计算灵敏度和特异度:
1. 按照之前的方法编译并运行人工神经网络,然后进行下一步。
2. 使用 scikit-learn 的 confusion_matrix 函数计算混淆矩阵。
3. 计算真阴性、假阴性、假阳性和真阳性。
4. 使用混淆矩阵计算灵敏度、特异度、精确度和假阳性率。
5. 通过为 y_pred_class 赋予不同的值来调整阈值。
6. 调整阈值后,重新计算灵敏度、特异度、精确度和假阳性率,并记录差异。
7. 可视化数据分布,绘制预测概率的直方图,以了解阈值降低如何提高灵敏度。

1.3 计算 ROC 和 AUC 曲线

使用患者再入院数据计算 ROC 曲线和 AUC 曲线,并定义一个函数来检查给定阈值下的灵敏度和特异度:
1. 打开 Jupyter 笔记本,运行之前计算准确率和零准确率的代码。具体代码如下:

import numpy as np
import pandas as pd
#Load the Data
patient_data=pd.read_csv("Health_Data.csv")
# Use the value_count function to calculate distinct class values
ytest.value_counts()
##use head function and divide it by lenght of ytest
print("Null Accuracy:",ytest.value_counts().head(1)/len(ytest))
  1. 从 scikit-learn 导入 roc_curve 并运行以下代码:
from sklearn.metrics import roc_curve
fpr,tpr,thresholds=roc_curve(y_test,y_pred_prob)
fpr =False Positive rate (1- specificity)
tpr = True Positive rate (sensitivity)
thresholds = the threshold value of y_pred_prob

注意,ROC 曲线的第二个参数是 y_pred_prob,而不是 y_pred。
3. 使用 matplotlib.pyplot 绘制 ROC 曲线:

import matplotlib.pyplot as plt
plt.plot(fpr,tpr)
plt.title("ROC Curve for Patient Readmission")
plt.xlabel("False Positive rate (1-Specificity)")
plt.ylabel("True Positive rate (Sensitivity)")
plt.grid(True)
plt.show()
  1. 为了检查给定阈值下的灵敏度和特异度,编写一个用户定义的函数:
def optimum_threshold(my_threshold):
    print ("Sensitivity:",tpr[thresholds>my_threshold][-1])
    print ("Specificity:",1-fpr[thresholds>my_threshold][-1])
  1. 计算不同阈值下的灵敏度和特异度,确保每次只执行一个值以获取结果。例如:
optimum_threshold(0.3)
optimum_threshold(0.5)
optimum_threshold(0.03)
optimum_threshold(0.1)

当阈值为 0.03 时,灵敏度为 1,特异度为 0.4。
6. 最后计算 AUC 分数:

from sklearn.metrics import roc_auc_score
roc_auc_score(y_test,y_pred_prob)

AUC 分数为 78.9%,表明模型表现一般。

2. 计算机视觉与卷积神经网络

2.1 计算机视觉概述

计算机视觉是机器学习和人工智能中最重要的概念之一。随着智能手机的广泛使用,每天产生的图像数据呈指数级增长,因此对计算机视觉领域专家的需求也达到了历史新高。计算机视觉是让机器理解和识别现实世界中的物体,它可以定义为构建能够模仿人眼和大脑功能的数学模型,本质上是训练计算机理解和处理图像及视频。计算机视觉在许多前沿领域都有重要应用,如医疗保健(X 光、MRI 扫描、CT 扫描等)、无人机、自动驾驶汽车、体育和娱乐等。

2.2 卷积神经网络(CNNs)

在计算机视觉领域,卷积神经网络(CNNs)是最常用的深度神经网络类型。CNNs 用于识别图像、根据图像相似度进行聚类以及实现场景中的目标识别。一个 CNN 有不同的层,包括输入层、输出层和多个隐藏层,隐藏层由全连接层、卷积层、RELU 激活函数层、归一化层和池化层组成。简单来说,CNNs 可以帮助识别图像并进行适当的标注,例如将老虎图像识别为老虎。

2.3 CNN 的架构

CNN 架构的主要组件如下:
- 输入图像 :可以是任何类型的图像,如人物、动物、风景、医学 X 光图像等,每个图像都被转换为零和一组成的数学矩阵。
- 卷积层 :图像在此开始处理,包括特征检测器(滤波器)和特征映射两个步骤。特征检测器是一个矩阵或模式,将其放在图像上以将其转换为特征映射;特征映射是通过将特征检测器应用于原始图像的所有可能位置而得到的缩小图像。在实际的 CNN 中,会使用多个特征检测器来生成多个特征映射。
- 池化层 :帮助忽略图像中不太重要的数据,进一步缩小图像,同时保留其重要特征。池化层包括最大池化、最小池化和平均池化等函数。例如,使用 2x2 的矩阵扫描特征映射,选择每个 2x2 矩阵中的最大值。示例代码如下:

classifier.add(MaxPool2D(2,2))
  • 扁平化 :将池化后的图像转换为一维向量,作为人工神经网络(ANN)的输入。例如,将一个 3x3 的矩阵转换为一个 1xn 的矩阵(n 为 9)。示例代码如下:
classifier.add(Flatten())

添加第一个卷积层的示例代码如下:

classifier.add(Conv2D(32,3,3,input_shape=(64,64,3),activation='relu'))

其中 32 表示有 32 个 3x3 的特征检测器,(64,64,3) 表示输入图像的尺寸,3 表示彩色图像(RGB),激活函数使用 Relu。如果使用 Theano 作为后端,输入图像的编码为 (3,64,64)。

综上所述,我们学习了模型评估的方法,包括如何处理不平衡数据集、计算混淆矩阵和相关指标,以及如何使用阈值调整指标和通过 ROC 曲线和 AUC 分数评估模型。同时,我们还了解了计算机视觉和卷积神经网络的基本概念和架构,包括输入图像、卷积层、池化层和扁平化等组件。这些知识在实际应用中具有重要价值,如信用卡欺诈检测、疾病预测和垃圾邮件检测等领域。

3. 模型评估与计算机视觉的实际应用

3.1 模型评估在实际问题中的应用

在实际生活中,许多问题都涉及到不平衡数据集,如信用卡欺诈检测、疾病预测和垃圾邮件检测等。在这些场景下,使用传统的准确率评估模型可能会产生误导,因此需要采用更合适的评估指标。

以信用卡欺诈检测为例,大部分交易都是正常的,欺诈交易只占很小的比例。如果一个模型简单地将所有交易都预测为正常交易,可能会获得很高的准确率,但实际上它并没有检测出任何欺诈交易,这样的模型是没有实际价值的。因此,在这种情况下,我们需要关注灵敏度、特异度、精确度和假阳性率等指标。

3.2 计算机视觉在各行业的应用

计算机视觉在多个行业都有广泛的应用,以下是一些具体的例子:
| 行业 | 应用场景 |
| ---- | ---- |
| 医疗保健 | 医学影像分析,如 X 光、MRI 扫描、CT 扫描等,帮助医生检测疾病和病变 |
| 无人机 | 目标识别、地形测绘、农业监测等 |
| 自动驾驶汽车 | 识别道路、交通标志、行人等,确保行车安全 |
| 体育和娱乐 | 运动员动作分析、比赛视频分析、虚拟场景生成等 |

3.3 结合模型评估和计算机视觉的应用案例

在医疗影像分析中,我们可以结合模型评估和计算机视觉技术来提高疾病检测的准确性。例如,使用 CNN 对医学影像进行处理和分析,然后使用混淆矩阵、ROC 曲线和 AUC 分数等评估指标来评估模型的性能。通过调整阈值,可以优化模型的灵敏度和特异度,以满足不同的临床需求。

4. 总结与展望

4.1 总结

本文主要介绍了模型评估和计算机视觉的相关知识。在模型评估方面,我们了解到当数据集不平衡时,准确性不是评估模型的最佳指标,需要使用混淆矩阵、灵敏度、特异度、精确度和假阳性率等指标来评估模型。同时,我们还学习了如何通过调整阈值来优化模型的性能,并使用 ROC 曲线和 AUC 分数来评估模型的整体表现。

在计算机视觉方面,我们介绍了卷积神经网络(CNNs)的基本概念和架构,包括输入图像、卷积层、池化层和扁平化等组件。CNNs 是处理图像和视频的强大工具,在多个行业都有广泛的应用。

4.2 展望

随着技术的不断发展,模型评估和计算机视觉领域也将不断进步。未来,我们可以期待以下几个方面的发展:
- 更复杂的模型架构 :随着深度学习的发展,可能会出现更复杂、更强大的 CNN 架构,以提高图像识别和处理的准确性。
- 多模态数据融合 :将图像数据与其他类型的数据(如文本、音频、视频等)进行融合,以获得更全面的信息。
- 实时处理能力 :提高计算机视觉系统的实时处理能力,以满足更多实时应用场景的需求。
- 跨领域应用 :计算机视觉技术将在更多领域得到应用,如智能家居、智能安防、工业自动化等。

4.3 流程图:模型评估与计算机视觉流程

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(模型评估):::process
    B --> B1(检查数据集平衡):::process
    B1 -->|不平衡| B2(使用混淆矩阵等指标):::process
    B1 -->|平衡| B3(使用准确性评估):::process
    B2 --> B4(调整阈值优化指标):::process
    B4 --> B5(计算ROC和AUC曲线):::process
    B --> C(计算机视觉):::process
    C --> C1(选择CNN架构):::process
    C1 --> C2(输入图像):::process
    C2 --> C3(卷积层处理):::process
    C3 --> C4(池化层处理):::process
    C4 --> C5(扁平化处理):::process
    C5 --> C6(输出结果):::process
    B5 --> D([结束]):::startend
    C6 --> D

通过本文的介绍,我们对模型评估和计算机视觉有了更深入的了解。在实际应用中,我们可以根据具体问题选择合适的评估指标和模型架构,以提高模型的性能和应用效果。同时,我们也期待未来这些技术的进一步发展,为我们的生活和工作带来更多的便利和创新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值