------------恢复内容开始------------
一、选题背景
二、研究内容和步骤:
2、使用PyTorch和scikit-learn框架进行机器学习任务的实现和评估
3、技术难点:
(1)如何准确评估模型的性能和分析分类结果
(2)每个类别的数据样本不一致
解决方法:
(1)对模型进行评估,并计算准确率、精确度、召回率等指标,绘制混淆矩阵和学习曲线,以可视化模型的性能和错误情况
(2)通过对数据样本多的数据集进行欠采样,使所有类别的数据集统一样本数量
三、机器学习实现步骤
目的:(1)对于宠物猫和狗的图像分类,可以帮助饲养者或宠物主人快速准确地识别自己的宠物。这对于宠物寻找、宠物遗失的寻找以及宠物社交媒体的管理和组织都非常有用。
1、导入必要的库
importpandasaspdfromPILimportImageimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.data.samplerimportSubsetRandomSamplerfromtorch.utils.dataimportDatasetimporttorchvision.transformsastransformsimportmatplotlib.font_managerasfmimporttorchimporttorch.nn.functionalasFfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,confusion_matriximportmatplotlib.pyplotaspltimportseabornassnsfromcollectionsimportCounterfromsklearn.utilsimportresampleimportnumpyasnp2、加载数据集和对数据预处理通过对数据的加载和数据预处理之后,打印出每个类别(猫、狗、野兽)的图片总数,并绘制出计数图以及饼图,更直观的表示出图片每个类别的数量以及所占的百分比。
通过对以上打印的数据以及可视化的图片进行观察,我们可以看到三个类别的数量存在一定的差异。虽然数量上的差距不是太大,但对于训练学习结果可能会有一定的影响。为了克服类别不平衡的问题,我们可以采取欠采样来平衡数据集,减少数量较多的类别的样本数量。
在进行欠采样后,每个类别的图片数量已经被扩展为一致的数量,使得模型在训练过程中更加公平地对待每个类别。
3、对数据进行预处理完之后,需要查看是否有缺失值,要检查路径和标签的数量是否匹配,并打印路径和标签数量,对缺失情况进行可视化
通过对打印的数据以及对条形图的查看,我们可以确认数据没有缺失。这意味着我们的数据集完整,并且可以进行进一步的分析和处理。
4、对将数据集划分为训练集和测试集,并创建对应的数据加载器,并定义了每个批次的样本数量。
5、获取一个批次的训练数据,并可视化
6、定义卷积神经网络模型,并设定在哪个设备上运行,为后续的模型训练做准备
通过上面的数据以及图形,我们可以观察到,随着训练轮次的增加,训练损失逐渐降低,训练准确率逐渐提高。这表明模型在学习过程中逐渐减小了预测值与真实标签之间的差异,提高了对训练数据的拟合能力。每轮的训练损失率都比上一轮的损失率低,说明模型的优化算法有效地调整了参数,使模型逐渐逼近最优解。也意味着模型在训练数据上的分类性能不断改善,更准确地预测了样本的标签。每轮的训练准确率都比上一轮的高,说明模型逐渐学习到了更多的特征和模式,提高了对训练数据的分类准确性。总体来说损失下降和准确率提高是我们期望在训练过程中看到的趋势,表明模型正在逐渐优化和提升性能。
8、评估模型在每个类别上的性能,并绘制ROC曲线以衡量模型的分类准确性
从图片中可以看出来,cat类别的ROC曲线相对于其他类别的曲线更加接近左上角,而dog和wild类别的曲线则相对较低。这意味着在不同的阈值下,模型更容易将cat类别正确分类为正例,并且在cat类别上具有较高的真阳性率和较低的假阳性率。相比之下,dog和wild类别在模型分类能力方面相对较弱,表明模型更容易将它们错误地分类为其他类别。
9、评估模型在验证集上对模型进行测试,并计算评估指标(准确率、精确率、召回率)以及混淆矩阵,并使用可视化工具将混淆矩阵进行可视化。
通过准确率、精准率、召回率可以得出模型在整体预测能力上表现良好,准确率较高。同时,模型在区分正例和负例方面也有较好的表现,具有较高的精确率和召回率。通过对混淆矩阵图的查看可以得出,在cat类别上,主对角线上的数值相对较高,而在dog和wild类别上较低,那么可以推断模型在cat类别上的识别率较高,而在dog和wild类别上的识别率较低。