利用Sort_1000pics数据集实现图像分类

 

 

1、数据集说明

从给的Sort_1000pics数据集中了解到,该数据集中包括10类图片,对图片进行查看了解到,0-99对应与人(people);100-199对应与沙滩(beaches);200-299对应与建筑(buildings);300-399对应与大卡车(trucks);400-499对应与恐龙(dinosaurs);500-599对应与大象(elephants);600-699对应与花朵(flowers);700-799对应与马(horses);800-899对应与山峰(mountains);900-999对应与食品(food)。

2 算法流程

Step 1:根据目录分别把图像信息进行读取。

Step2:处理图像数据,先进行尺度变换到256*256,然后进行灰度化处理,再把灰度化处理后的数据进行归一化,把数据保存到矩阵X中;对读取的文件的名字进行处理,截取数字进行除100取商进行标签处理,把得到的标签保存到矩阵Y中。

Step3:根据原数据集的信息分别对0-9进行命名。

Step4:把处理后的数据X,Y按照Y中的比例进行分割处理,其中测试集为20%,训练集为80%。

Step5:建立模型(bytes、决策树、SVM)

Step6:把训练集带入模型进行训练。

Step7:把测试集带入训练好的模型进行预测,输出模型对测试集的准确率,召回率和F1测度。

3、结果分析

(1)召回率、准确率与F1测度

       对于二分类问题中,可将样例根据其真实类别和分类器预测类别划分为:

  1. 真正例(True Positive,TP):真实类别为正例,预测类别为正例。
  2. 假正例(False Positive,FP):真实类别为负例,预测类别为正例。
  3. 假负例(False Negative,FN):真实类别为正例,预测类别为负例。
  4. 真负例(True Negative,TN):真实类别为负例,预测类别为负例。

然后可以构建混淆矩阵如下表所示:

利用Sort_1000pics数据集实现图像分类

准确率的计算公式为(Precision,P):表示在所有样本中预测正确的概率

P=TPTP+FP利用Sort_1000pics数据集实现图像分类

       召回率的计算公式为(Recall,R):表示在所有正例中预测为正例的概率

R=TPTP+FN利用Sort_1000pics数据集实现图像分类

       F1测度的计算公式为:

F1=2*P*RP+R利用Sort_1000pics数据集实现图像分类

       对于本实例中的多分类问题,也可以建立混淆矩阵,比如真实是人的正例中,实际预测为人的为TP,其余预测结果都为FN

(2)实验结果:

利用Sort_1000pics数据集实现图像分类

bytes模型分类预测指标图

利用Sort_1000pics数据集实现图像分类

决策树模型分类预测指标图

利用Sort_1000pics数据集实现图像分类

SVM模型分类预测指标图

(3)结果分析

本次实例是根据同一个Sort_1000pics数据集进行处理,将数据集进行尺度变化到灰度化再到归一化形成数据集矩阵,把80%的数据分别通过bytes、决策树和SVM进行训练,利用剩余的20%进行预测,得到三种模型对测试集的正确率、召回率和F1测度,根据最后的结果我们整体上发现,对于正确率是SVM>bytes>决策树,召回率是SVM>bytes>决策树,F1测度是SVM>bytes>决策树。因此我们可以得出对于该数据集的分类来说,SVM的效果优于其他两种。

同时根据后面的支持数可以发现我们测试集上的数据的确是根据原样本中的比例进行分割的,这样对于处理数据更具有说服力。