资源下载地址:https://download.csdn.net/download/sheziqiong/85734203
资源下载地址:https://download.csdn.net/download/sheziqiong/85734203

基于 ANN 与 KNN 的图像分类

一、摘要

模型评判参数

在介绍模型评判参数之前,首先要定义一些变量。

混淆矩阵:

True Positive(真正,TP):将正类预测为正类数

True Negative(真负,TN):将负类预测为负类数

False Positive(假正,FP):将负类预测为正类数误报 (Type I error)

False Negative(假负,FN):将正类预测为负类数 → 漏报 (Type II error)

准确率:分类正确的比例,其值为分类正确的样本数/样本总数,计算公式为

准确率:分类正确的比例,其值为分类正确的样本数/样本总数,计算公式为

错误率:被错分的比例,其值可为 1-准确率,也可通过 error rate = (FP+FN)/(TP+TN+FP+FN)求出。

灵敏度:正例中被分对的比例,sensitive = TP/P。

特效度:负例中被分对的比例,specificity = TN/N。

精确度:被分为正例的示例中实际为正例的比例,P=TP/(TP+FP)。

召回率:有多少个正例被分为了正例,R=TP/(TP+FN)。

Macro f1: 指将所有混淆矩阵的 P 和 R 都算出来,求得的平均 P 和 R 求出的 F1.公式为:

Micro f1: 指将所有混淆矩阵中的数都算出来,求得的平均混淆矩阵计算出来的 P 和 R 计算出来的 F1;

训练模型准确率:用训练数据求出的准确率;

测试模型准确率:用测试数据求出的准确率;

训练时间:指完成一整次训练需要消耗的时间。

二、ANN 说明

● 神经元输入输出的计算方法:假设一个训练样本为

,对应的输出向量为

,l 为类别个数,即输出向量是类别的独热编码。隐藏层第 h 个节点的输入权重为

,对应的偏移量为

。第 j 个输出层节点的输入权重为

,对应的偏移量为

。q 为隐藏层节点个数。令

为 sigmoid 函数,如图所示,

第 j 个输出神经元的输入为

第 j 个输出神经元的输出为

第 h 个隐层神经元的输入为

第 h 个隐层神经元的输出为

● 训练算法的计算方法:如下图所示,假设一个三类别分类问题,

对一个训练样本

,l 为类别个数,设神经网络的输出为

。即

,那么网络在输出节点上的均方误差为

。BP 算法的本质就是梯度下降,在训练神经网络的时候,任意参数的迭代更新公式为:

隐藏层到输出层的权值

的更新过程如下

构成了

影响了

,最终

影响了 E,因此由链式法则可知:

输出层的阈值

更新如下:

2.2 ANN 模型参数介绍

隐藏层层数:指网络中输入层与输出层之间的非线性层数,多个隐藏层可以用于拟合非线性函数。层数越深,理论上拟合函数的能力增强,但可能发生过拟合问题,同时也会增加训练难度,使模型难以收敛。在训练过程中,每个隐藏层中的神经元将前一层的值进行加权线性求和转换

,再通过非线性激活函数

。 输出层接收到的值是最后一个隐藏层的输出经过变换而来的。

学习率种类:指使用的学习率的步长。学习率(Learning rate)作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。

迭代次数:指迭代运算中循环次数的上限,当循环次数达到这一值时停止训练。一般来说,学习次数越多,学习效果越好,但过多的迭代次数会消耗大量时间,还可能产生过拟合,所以应选用合适的迭代次数。

窗口大小:指一次训练所选取的样本数。窗口大小影响模型的优化程度和速度。同时其直接影响到 GPU 内存的使用情况。无窗口训练的梯度是准确的,但由于训练速度较慢,只适合小样本的数据;随着窗口的增大,梯度会越来越准确,但梯度非常准确后,再增加窗口大小就无太大意义了。

单层隐藏层神经元个数:指一个隐藏层中有多少个神经元。神经元太少将导致欠拟合(underfitting),但使用过多的神经元可能导致过拟合,且会增加训练时间。神经元的最佳数量需要经过不断实验来获得。

激活函数:指神经网络中用于计算输入和偏差的加权和的函数,用于确定神经元是否可以释放。如果不加激活函数,则无论由多少层隐含层,最终结果仍会是原始输入的线性变化,所以 ANN 中每个隐含层都会配一个激活函数,用来提供非线性变化。激活函数具有改善数据学习模式的能力,从而实现了特征检测的自动化,并证明它们在神经网络中的合理性,且对跨领域分类很有帮助。比较常见的几种激活函数由 Sigmoid 函数,Tanh 函数以及 ReLU 函数。

  • Sigmoid 函数:这是一个在生物学中常见的 S 型函数,也称为 S 型生长曲线。在信息科学中,由于其单增以及反函数单增等性质,Sigmoid 函数常被用作神经网络的阈值函数,将变量映射到 0,1 之间。公式如下:

  • Sigmoid 方法图像
  • Tanh 函数:这双曲正切函数,由基本双曲函数双曲正弦和双曲余弦推导而来。公式如下:

  • Tanh 方法图像
  • ReLU 函数:用于隐层神经元输出,公式如下:

  • Relu 方法图像

2.4 实验结果展示

我们知道,模型训练的最终终止条件是在我们所设定的迭代次数内,模型的效果呈现收敛趋势,因此,迭代次数过小,模型的效果可能是欠拟合的,迭代次数过多,模型的效果是过拟合且会浪费过多时间,经过试验,我们在训练的过程中,迭代次数在 5000 左右时,拟合效果良好,因此,在以下的分析中,将不再对迭代次数的影响进行讨论。

因为需要考虑的参数很多,因此我们在对某一种参数进行讨论时,其他变量的参数将取相同的数值。

2.4.1 隐藏层的层数

每层固定 50 个,1 层->2 层->3 层

准确率随隐藏层的变化曲线

Macro f1 随隐藏层的变化曲线

Micro f1 随隐藏层的变化曲线

在这里,我们能够发现当我们的隐藏层层数增加时,模型的效果反而是衰退了。

Accuracy Macro-F1 Micro-F1
1 层 0.9608333333333332 0.9608537368332261 0.9608333333333332
2 层 0.9002777777777776 0.9005720715926264 0.9002777777777776
3 层 0.8527777777777776 0.8526058902872711 0.8527777777777776

2.4.2 隐藏层神经元节点的个数

->200->400

准确率随隐藏层神经元节点个数的变化曲线

Macro f1 随隐藏层神经元节点个数的变化曲线

Micro f1 随隐藏层神经元节点个数的变化曲线

我们发现,当隐藏层的神经元节点增加的时候,模型的性能是越来越好的,但其增长的速率是不断变小的。

Accuracy Macro-F1 Micro-F1
100 个 0.9655555555555555 0.9657414691187194 0.9655555555555555
200 个 0.9802777777777778 0.980292180327784 0.9802777777777778
400 个 0.9819444444444444 0.981951361824427 0.9819444444444444

2.4.3 窗口大小

->100->150

准确率随窗口大小的变化曲线

Macro f1 随窗口大小的变化曲线

Micro f1 随窗口大小的变化曲线

通过图像可以观察到,对于我们的 ANN 模型来说,窗口大小越大,模型的性能越差。

Accuracy Macro-F1 Macro-F1
50 0.9608333333333332 0.9608537368332261 0.9608333333333332
100 0.9561111111111111 0.9560975986343635 0.9561111111111111
150 0.9552777777777777 0.9555034520767116 0.9552777777777777

2.4.4 学习率

  • 随着层数的增加,不同学习率训练时间的变化

可以观察到,随着层数的不断叠加,各种学习率的训练时间是不断增加的,且 constant 方法的表现是最好的。

invscaling constant adaptive
1 层 78.23547966000001 77.7188933999998 77.81292566000047
2 层 80.345678454938895 80.0234578478455 79.64839478932734
3 层 82.69218050000018 82.42171543999939 82.69385183999984

随着单层神经元个数的增加,不同学习率训练时间的变化

可以观察到,随着隐藏层中神经元个数的不断增加,各学习率的其训练时间是不断增加的,其中 invscaling 相对较好。

invscaling constant adaptive
100 个 32.01377033999997 34.805954499999984 34.05963100000008
200 个 52.995126360000086 59.619636000000014 53.854412799999864
400 个 185.63600004000017 188.34518989999992 187.09286480000037
  • 随着窗口大小的增加,不同学习率训练时间的变化

可以观察到,随着 batch_size 的增加,其单次训练时间是呈现出减少的趋势的,其中 constant 的表现最好。

invscaling constant adaptive
50 82.69218050000018 82.42171543999939 82.69385183999984
100 72.53692752000043 72.31512332000057 73.34816916000128
150 70.87542775999991 70.63270916000037 70.88269793999935

在这里,需要对学习率进行说明,每种学习率(这里的学习率是最终一定能使得收敛的)最终到达的终点是相近的,也就是学习率种类对模型的效果影响是不明显的,它影响的是我们到达收敛趋势阈值的快慢程度,也就是我们的训练时间。

2.5 实验结论

通过进行 ANN 模型的建立、训练和结果分析,我们发现,使用 ANN 模型进行分类处理,模型的训练数据集的精确度最高可以达到 98.20%,测试数据集的精确度可以达到 95.53%,说明使用 ANN 模型进行此场景的学习过程相对较好,但是要注意选取激活函数和权值优化策略。本例中,最好使用 relu 激活函数和 sgd 权值优化策略,可以获得客观的训练结果和较短的训练时间。

3.4 实验结果介绍

这里使用控制变量法:

控制迭代次数 number=1:

3.4.1 邻居个数变化

变量是邻居个数 k_num(range:1->9,step:1)

Accuracy Macro f1 Micro f1
1 0.9836111111111111 0.9836526557145753 0.9836111111111111
2 0.9761111111111112 0.9762436019980573 0.9761111111111112
3 0.9811111111111112 0.9812310598084594 0.9811111111111112
4 0.9786111111111111 0.9788235617504288 0.9786111111111111
5 0.9780555555555556 0.978309935852902 0.9780555555555556
6 0.9783333333333334 0.9785472937125508 0.9783333333333334
7 0.9786111111111111 0.9788243872282233 0.9786111111111112
8 0.9755555555555555 0.9758129289967621 0.9755555555555555
9 0.9766666666666667 0.9769256358759116 0.9766666666666667

准确率随邻居个数的变化图像

Macro f1 随邻居个数的变化图像

Micro f1 随邻居个数的变化图像

3.4.2 迭代次数

变量是迭代次数 number(range:5->9,step:1)

Accuracy Macro f1 Micro f1
5 0.9811111111111112 0.9812310598084594 0.9811111111111112
6 0.9811111111111112 0.9812310598084594 0.9811111111111112
7 0.981111111111111 0.9812310598084595 0.981111111111111
8 0.981111111111111 0.9812310598084595 0.981111111111111
9 0.9811111111111112 0.9812310598084595 0.9811111111111112

Macro f1 随迭代次数的变化图像

Micro f1 随迭代次数的变化图像

通过图像和表中数据可以明显看出 5 轮迭代之后,模型的效果已经呈现收敛趋势,指标基本一致,可见对于 k_num=3 的情况我们尝试了过多的迭代,浪费时间。接下来数据可以一定程度减少 number,减少过拟合可能和所花时间。

资源下载地址:https://download.csdn.net/download/sheziqiong/85734203
资源下载地址:https://download.csdn.net/download/sheziqiong/85734203

Python实现ANN与KNN的图像分类相关推荐

  1. Python 计算机视觉(十七)—— 基于KNN的图像分类

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  2. Python,OpenCV使用KNN来构建手写数字及字母识别OCR

    Python,OpenCV使用KNN来构建手写数字及字母识别OCR 1. 原理 1.1 手写数字识别 1.2 字母识别 2. 源码 2.1 手写数字OCR 2.2 字母OCR 参考 这篇博客将介绍如何 ...

  3. KNN 算法--图像分类算法

    KNN 算法–图像分类算法 找到最近的K个邻居,在前k个最近样本中选择最近的占比最高的类别作为预测类别. 给定测试对象,计算它与训练集中每个对象的距离. 圈定距离最近的k个训练对象,作为测试对象的邻居 ...

  4. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  5. Python+OpenCV:基于KNN手写数据OCR(OCR of Hand-written Data using kNN)

    Python+OpenCV:基于KNN手写数据OCR(OCR of Hand-written Data using kNN) OCR of Hand-written Digits ########## ...

  6. 一、用Python从零实现横向联邦图像分类

    文章目录 前言:用Python从零实现横向联邦图像分类 一.环境配置 1. 下载Anaconda 2. 下载显卡对应的CUDA 3. 安装cuDNN 4. 配置pytorch-gpu环境 二.用Pyt ...

  7. Python原生代码实现KNN算法(鸢尾花数据集)

    一.作业题目 Python原生代码实现KNN分类算法,使用鸢尾花数据集. KNN算法介绍: K最近邻(k-Nearest Neighbor,KNN)分类算法,是机器学习算法之一. 该方法的思路是:如果 ...

  8. opencv(python)使用ann神经网络识别手写数字

    opencv中也提供了一种类似于Keras的神经网络,即为ann,这种神经网络的使用方法与Keras的很接近. 关于mnist数据的解析,读者可以自己从网上下载相应压缩文件,用python自己编写解析 ...

  9. 基于KNN实现图像分类——理解图像分类

    1. KNN KNN被翻译为最近邻算法,顾名思义,找到最近的k个邻居,在前k个最近样本(k近邻)中选择最近的占比最高的类别作为预测类别. 如上图所示: 五角星(待预测的)要被赋予哪个类,是紫色圆形还是 ...

最新文章

  1. 如何调试你的C#程序
  2. Hibernate复习之Hibernate基本介绍
  3. CentOS_6.5配置iptables防火墙策略
  4. 《高性能JavaScript》第八章 编程实践
  5. cors跨域_跨域,不止CORS
  6. 软件设计和设计的问题
  7. 360董事长周鸿祎跨足手机市场是福还是祸?
  8. 论文笔记 Aggregated Residual Transformations for Deep Neural Networks
  9. linux unzip命令不存在_15个常用基础命令Linux(很多人不知道!)
  10. 【万里征程——Windows App开发】控件大集合1
  11. 挂载ntfs_Linux识别移动硬盘ntfs格式
  12. Excel怎么求和?5大常用的Excel求和公式
  13. c语言.jpg图片转成数组_pdf怎么转成jpg最简单 mac
  14. matlab编写二分法程序,我写的程序,想用Matlab二分法实现,望高手帮忙!
  15. 接口测试与Postman
  16. 软件测试,软件测试练习题
  17. java 使用 Amazon SES 发送电子邮件
  18. win7官方原版iso镜像_官方原版下载!Windows 10 v1909简体中文ISO镜像
  19. SparkSql MAPJOIN优化之小表left join大表
  20. SWIFT Code 和 Routing Number 的关系

热门文章

  1. 电路ESD、EMC(EMI/EMS)、放电齿、走线的直角锐角与弧线考虑
  2. PayPal五合一收款码在线生成网站源码
  3. 2021年陕西省安全员B证复审考试及陕西省安全员B证实操考试视频
  4. URAL 1833|Hopes of Rowing|最小割
  5. API开放接⼝设计之appId,appSecret,accessToken(同微信开发平台接⼝)
  6. windbg入门教程之获取异常报告
  7. python六角星_在Python中使用龟画出不同边长的六角星。
  8. 进入银行项目研发部后的感想
  9. 内存函数__memset
  10. 自然语言处理与化学的关系