vue做网站如何优化seo,二手物品交易网站开发意义,公司网站制作平台,网站开发行业发展前景一、赛题概述及分析
1、背景介绍
邮政系统每天都会处理大量的信件#xff0c;最为要紧的一环是要根据信件上的收信人邮编进行识别和分类#xff0c;以便确定信件的投送地。原本这项任务是依靠大量的人工来进行#xff0c;后来人们尝试让计算机来替代人工。然而#xff0c…一、赛题概述及分析
1、背景介绍
邮政系统每天都会处理大量的信件最为要紧的一环是要根据信件上的收信人邮编进行识别和分类以便确定信件的投送地。原本这项任务是依靠大量的人工来进行后来人们尝试让计算机来替代人工。然而因为多数的邮编都是手写的数字并且样式各异所以没有统一编制的规则可以很好地用于识别和分类。
20世纪80年代美国国家标准与技术研究所National Institute of Standards and Technology即NIST建立了经典的MNIST数据集该数据集由250个不同人手写的阿拉伯数字构成其中50%是高中生50%来自人口普查局的工作人员测试集也是相同比例的手写数字数据。MNIST数据集是机器学习领域的一个经典数据集该数据集包含6万张训练图像和1万张测试图像其历史几乎和这个领域一样长而且被人们深入研究。
该赛题的目的是为经典的基于手写阿拉伯数字集MNIST竞赛提供一个简单的扩展且使用了最近发布的卡纳达语数字集。卡纳达语是印度西南部卡纳塔克邦的官方行政语言该语言全球有近6000万人使用根据印度宪法第3441和351条卡纳达语是印度22种语言之一。该语言是使用官方的卡纳达语手迹编写的该脚本是Brahmic家族的元音附标文字其起源可追溯到Kadamba手迹公元325-550如图1、图2所示。 该数据集主要由印度班加罗尔65名志愿者手写制作而成每位志愿者填写一张有32×40网格的A3纸每张A3纸包含每个数字的128个实例假设它足够大以捕获大多数自然志愿者的字体的变化最后使用Konica Accurio-Press-C6085扫描仪以600点/英寸的分辨率扫描得到了65张4963×3509的png图像处理后得到Kannada MNIST数据集。此外除了主要数据集外还有一个由另外8名20到40岁之间的志愿者额外的手写数据集10KB的图像称为“Dig-MNIST数据集”该数据集是在非母语志愿者的帮助下创建的在较小的表格上进行编写并且使用不同的扫描仪设置进行扫描该测试集可用作域外的测试集如图3所示。 不同的符号用于表示语言中的数字09这些数字与当今世界许多地方流行的现代阿拉伯数字不同与其他一些古老的数字系统不同这些数字在卡纳塔克邦的日常生活中被大量使用在印度普通车辆牌照上的普遍使用说明了这一点如图4所示。
2、问题分析
与经典的MNIST手写数字识别问题类似Kannada MNIST数据集也提供了一些手写数字的图片图片一共有10类分别对应数字0到9与之不同的是该数据集的数字是Kannada语中的数字。
该数据集的图像以像素点的形式给出如何识别数据集中的数字也就是如何将手写数字的灰度图像28像素×28像素划分至09这10个类别中因此该问题本质上是一个多分类问题。
本文将采用比较经典的4种机器学习算法来解决该问题分别是逻辑回归、决策树、XGBoost和PCA-SVM算法最后对各个算法所得结果及其性能进行比较分析得出最优结果。
二、数据格式和预处理
1、数据格式
本赛题所使用的Kannada数字集的结构格式与MNIST相同与之不同的是该赛题提交的结果会在公共测试集和私有不可见测试集上进行评分。该数据集的所有详细信息可在Prabhu, Vinay Uday于 2019年发表的论文[1]中查阅。
竞赛提供的数据文件为train.csv、test.csv和Dig-MNIST.csv其中包含Kannada语言手写数字09的灰度图像。每个图像为28×28像素总计784像素每个像素取值为0255之间含的整数该值越大表示像素颜色越深。训练数据文件train.csv中有785列第1列为标签列其余列为图像的像素值即像素列每个像素列有第1行均为pixel{x}其中x为0783之间含0和783的整数。将x分解为xi×28ji和j为027之间含0和27的整数则可定位该像素在28×28像素矩阵的第i行、第j列索引从0开始。例如pixel31表示从左数第4列从上数第二行的像素。如果去掉“pixel”前缀则像素组成图像如下
000 001 002 003 ... 026 027028 029 030 031 ... 054 055056 057 058 059 ... 082 083| | | | ... | | 728 729 730 731 ... 754 755756 757 758 759 ... 782 783赛题提供的数据集共4个文件其大小和数据规格如表1所示。
表1 数据集文件及大小 文件名文件大小数据规格行数, 列数Dig-MNIST.csv18.4MB(10240, 785)sample_submission.csv0.03MB(5000, 2)test.csv8.67MB(5000, 785)train.csv104.75MB(60000, 785)
2、数据预处理
观察整个数据集不存在数据缺失等情况训练和测试数据文件前几行如表2、表3所示。
表2 训练数据文件tran.csv前5行数据 labelpixel0pixel1pixel2...pixel774pixel780pixel781pixel782pixel78300000...0000011000...0000022000...0000033000...0000044000...00000
将训练数据按标签类型可看到每个标签类型有6000个训练样本共60000个样本如表4所示。
表3 测试数据test.csv前5行数据idpixel0pixel1pixel2...pixel774pixel780pixel781pixel782pixel78300000...0000011000...0000022000...0000033000...0000044000...00000
表4 训练数据各标签类型样本数label06000160002600036000460005600066000760008600096000 随机选取训练数据中80%的数据作为训练集其余20%的数据作为测试样本并选取合适的分类器利用训练集进行训练得到训练好分类器模型再用该模型对测试集进行识别分析识别结果并对比。
训练集每一类图片的前10张图片共100张图片如图5所示。
三、模型训练和识别
分类学习是最为常见的监督学习问题并且其中的经典模型也最为广泛地被应用。本赛题属于多分类Multiclass Classification的问题本文将利用多个常用算法模型分别来解决该问题并对比各个模型得到的分类结果利用准确率、召回评估其性能。
1、逻辑回归算法
逻辑回归Logistic Regression与它的名字恰恰相反它是一个分类器而非回归方法在一些文献里它也被称为logit回归、最大熵分类器MaxEnt、对数线性分类器等。
使用sklearn.linear_model中的LogisticRegression方法来训练逻辑回归分类器其主要参数设置如下
ModelLR LogisticRegression(C5, solver‘lbfgs’, multi_class‘multinomial’)其中C为正则化系数λ的倒数float类型默认为1.0必须是正浮点型数越小的数值表示越强的正则化solver选择用于求解最大化“似然对数”的算法对于多分类问题应使用“newton-cg”“sag”、“saga”“lbfgs”等此处采用lbfgsmulti_class为多分类问题选择训练策略设置为multinomial。设置好参数后进行训练并利用得到的模型对测试集进行数字识别使用模型自带的评估函数进行准确性测评得到准确度为0.9655用sklearn.metrics里面的classification_report模块对识别结果做更加详细的分析得到结果如表5所示。可以看到逻辑回归模型能够以比较高的准确度识别Kannada手写体数字平均而言各项指标都在97%上下结果以混淆矩阵表示如图6所示。表5 逻辑回归识别结果详细评估precisionrecallf1-scoresupport00.960.960.96116610.980.980.98123520.990.990.99117330.950.950.95121940.970.980.98118950.970.960.97121660.960.930.95119670.920.930.93115480.980.980.98119790.970.980.981255accuracy12000macro avg0.970.970.9712000weighted avg0.970.970.9712000 2、决策树算法
决策树是一种树型结构其中每个内部节结点表示在一个属性上的测试每一个分支代表一个测试输出每个叶结点代表一种类别。 决策树学习是以实例为基础的归纳学习其采用的是自顶向下的递归方法基本思想是以信息熵为度量构造一棵熵值下降最快的树到叶子节点的处的熵值为零此时每个叶结点中的实例都属于同一类。在决策树的算法中建立决策树的关键即在当前状态下选择哪个属性作为分类依据。根据不同的目标函数建立决策树主要有ID3、C4.5和CART三种算法主要的区别就是选择的目标函数不同ID3使用的是信息增益C4.5使用信息增益率CART使用的是Gini系数本文采用CART算法。参数设置如下
DT DecisionTreeClassifier(max_depth10, random_stateseed)其中max_depth为决策树最大深度常用来解决过拟合通常取值10-100之间此处取10。使用模型自带的评估函数进行准确性测评得到准确度为0.85275sklearn.metrics里面的classification_report模块对识别结果平均也在0.85左右混淆矩阵如图7所示。3、XGBoost算法
XGBoost实现的是一种通用的Tree Boosting算法此算法的一个代表为梯度提升决策树Gradient Boosting Decision Tree, GBDT又名MART(Multiple Additive Regression Tree)。
GBDT的原理是首先使用训练集和样本真值训练一棵树然后使用这棵树预测训练集得到每个样本的预测值由于预测值与真值存在偏差所以二者相减可以得到“残差”。接下来训练第二棵树此时不再使用真值而是使用残差作为标准答案。两棵树训练完成后可以再次得到每个样本的残差然后进一步训练第三棵树以此类推。树的总棵数可以人为指定也可以监控某些指标例如验证集上的误差来停止训练。设置模型参数如下
model.fit(X_train, Y_train, early_stopping_rounds 5, eval_seteval_set, verboseTrue)其中early_stopping_rounds为早期停止次数 假设为100验证集的误差迭代到一定程度在100次内不能再继续降低就停止迭代此处设置为5。Verbose设置为True则对evals中元素的评估结果会输出在结果中。相比前2个算法该算法明显需要的时间更长。等待大约10分钟后迭代100次得到精确度为95.76%与逻辑回归算法性能相近迭代结果较长部分输出如图8所示。
4、基于PCA降维的SVM算法
支持向量机support vector machines, SVM是一种二分类模型它的基本模型是定义在特征空间上的间隔最大的线性分类器间隔最大使它有别于感知机SVM还包括核技巧这使它成为实质上的非线性分类器。SVM的学习策略就是间隔最大化可形式化为一个求解凸二次规划的问题也等价于正则化的合页损失函数的最小化问题。SVM的学习算法就是求解凸二次规划的最优化算法。
PCA算法主要思路是数据从原来的坐标系转换到新的坐标系由数据本身决定。转换坐标系时以方差最大的方向作为坐标轴方向因为数据的最大方差给出了数据的最重要的信息。第一个新坐标轴选择的是原始数据中方差最大的方向第二个新坐标轴选择与第一个新坐标轴正交且方差次大的方向。重复该过程重复次数为原始数据的特征维数。
通过这种方式获得的新的坐标系大部分方差都包含在前面几个坐标轴中后面的坐标轴所含的方差几乎为0。于是我们可以忽略余下的坐标轴只保留前面的几个含有绝大部分方差的坐标轴。事实上这样也就相当于只保留包含绝大部分方差的维度特征而忽略包含方差几乎为0的特征维度也就实现了数据特征的降维处理。
利用sklearn.decomposition中提供的PCA模块进行模型构建设置参数如下
pca PCA(n_components0.7,whitenTrue)经过测试可以发现该算法运行速度快且准确度能达到0.99如图9所示。四、性能评估与对比
经过以上测试四种方法对该Kannada MNIST数据集分类所得score情况总结如表6、图10所示。
表6 四种模型结果表ModelScore3PCA0.9908330LogisticRegression0.9602502XGBOOST0.9575831Decision Tree0.852750 综上测试可以得到基于PCA降维的SVM算法时间复杂度最小运算耗费资源最少能够达到的准确度越高通过多次在测试数据test.csv上生成提交文件并提交到Kaggle网站最后综合得分也是该算法最优最终达到的分数为0.97。
五、参考文献
[1] Prabhu, Vinay Uday, Sanghyun Han, Dian Ang Yap, Mihail Douhaniaris, Preethi Seshadri, and John Whaley. “Fonts-2-Handwriting: A Seed-Augment-Train framework for universal digit classification.” arXiv preprint arXiv:1905.08633 (2019). [ https://arxiv.org/abs/1905.08633 ]