本文为专业课程《机器学习与模式识别》的结课作业,基于MNIST手写数字数据集完成,该数据集包含60,000个用于训练的示例和10,000个用于测试的示例。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值为0到1。数据集下载链接如下。
本文中所做的工作主要包括以下几个部分,具体结果详见结果分析
- 利用numpy编写了KNN、SVM以及MLP分类算法,并从数据集中选择小规模数据用于测试,根据准确率、程序运行时间等方面选择了KNN和MLP进行下一个部分的验证与测试。
- 采用五折交叉验证法对KNN算法进行了训练与验证,并对比分析了参数K以及数据量对算法准确率的影响。
- 同样采用五折交叉验证法对MLP算法进行了训练与验证,通过改变神经网络的隐藏层数量、神经元个数等参数分析并选择了最佳的参数。
- 对图像提取HOG特征并进行训练与分类,并与仅使用像素特征的分类结果对比,有效提高了分类准确率。
代码中所有分类算法均基于numpuy实现,数据处理部分借助scipy和sklearn实现,有关版本如下:
- Python: 3.9.1
- Numpy: 1.20.1
- scipy: 1.6.0
- sklearn: 0.24.2
Dateset.py -> 主要包含了数据集类dataset
grt_hog.py -> 提取原图像的HOG特征并保存为csv文件
PCA降维.py -> 数据集处理部分, 根据原始数据生成一个csv文件,作为后面训练的数据。
classification.py -> 分类过程中所用到的各种算法,如KNN、SVM和MLP等,均基于numpy实现。
初步测试-*.py -> 小规模数据测试
五折交叉验证-*.py -> 对全部数据进行五折交叉验证