美文网首页
数据挖掘期末实验报告

数据挖掘期末实验报告

作者: 开发猛男 | 来源:发表于2019-06-18 16:31 被阅读0次

课程综述(20分)

方法应用(25分)

1.研究背景(Why) 5分

最近在看《Python数据挖掘入门与实践》这本书,其中第8章提到了使用神经网络破解验证码。我以前调用过商业的第三方库用于识别验证码,收费达100条/元。正好借此机会,手动实现一下该项目,一探究竟。

2. 方案与技术路线(How)5分

神经网络简介

神经网络算法最初根据人类大脑的工作机制设计。神经网络由一系列相互连接的神经元组成。每个神经元都是一个简单的函数,接收一定输入,给出相应输出。

用于数据挖掘应用的神经网络,神经元按照层级进行排列。第一层,也就是输入层,接收来自数据集的输入。第一层中的每个神经元对输入进行计算,把得到的结果传给第二层的神经元。这种叫作前向神经网络。本实验暂且把它简称为神经网络。


神经元

我优先考虑使用全连接层,即上一层中每个神经元的输出都输入到下一层的所有神经元。
这是因为比起其他连接模式,全连接神经网络更简单,计算起来更快捷,适合我的小项目。

创建神经网络需要用到以下参数:神经网络共有多少层,隐含层每层有多少个神经元,神经元之间边的权重。

神经网络大小合适,且权重经过充分训练,它的分类效果才能精确。大小合适并不是越大越好,因为神经网络过大,训练时间会很长,更容易出现过拟合训练集的情况。

3. 实验或实例 数据、结果 及分析(5分)

创建验证码数据集

本试验所用验证码由我自己编写函数随机生成。
数据集产生规则为:

  • 使用四个英文字母组成的单词作为文本
  • 字母全大写
  • 不使用数字、符号。
  • 对单词使用错切变换后,生成验证码图像
单词gene对应的验证码图片

多次调用该函数,就能生成验证码数据集。

训练数据集

书中采用 PyBrain 库来构建神经网络分类器,但由于环境问题,我采用sklearn库中的 MLPclassifier 来构建分类器。创建了隐含层数目为100的MLP分类器,输入神经元个数为400, 隐含层为100个,输出神经元为26个。

from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(hidden_layer_sizes=(100,), random_state=14)
clf.fit(X_train, y_train)

测试数据集

初次测试结果发现:验证码正确率为77.3%,单个字母的识别正确率为84.3%


image.png
提升正确率

把经常识别错误的字母统计出来,用二维矩阵来表示。每行和每列均为一个类别。
矩阵的每一项表示一个类别(行对应的类)被错误识别为另一个类别(列对应的类)的次数。例如,(4,2)这一项的值为6,表示字母D有6次被错误地识别为字母B。

利用图像可视化,矩阵中点越亮表示值越大。



如图可见,字母U常被错误识别为H。

利用词典提升正确率

改进思想:刚刚的识别过程是,识别结果直接与正确结果比较。而我们验证码实际上是由词典中的单词生成,不如在返回结果之前,先查找词典里是否有预测结果对应的单词,若有则返回该结果,没有则返回与该结果相近的单词。

那么如何找到相近的单词?方法有很多。但是根据常识可知,在相同位置有字母相同个数越多,两个单词越相似。每次改变(增、删、改)一个字母,将两个字符串变为相同的最小处理次数被称为编辑距离。因为这不是本实验的重点,所以这里只提一下。
我使用NLTK库来计算字符串之间的编辑距离。

from nltk.metrics import edit_distance
steps = edit_distance("STEP", "STOP")
print("The number of steps needed is: {0}".format(steps))
# The number of steps needed is: 1
# 字符串编辑距离为1

改进预测算法后,重新训练并预测,单词识别率提升了3%,到达80%

预测

4. 创新与特色(10分)

  • 通过在词典中查找相近单词,改进提升识别正确率达80%
  • 将神经网络与字母识别相结合,单个字母的识别率可达97%
  • 使用Python第三方库,代码量很少,可注重优化算法。

收获与建议(5分)

这次项目手动实现了神经网络识别验证码,但是系统识别率还不够,即使经过优化后也只有80%,并且数据集由我自己生成,离商用的验证码识别系统效果还差太远。主要原因还是,模型过于简单,但毕竟是自己测试用的项目,不能过多苛求。
收获:熟悉了神经网络的设计和构建,并对图像处理、字符匹配加深了解。数据挖掘这门课和机器学习密切相关,数据挖掘对数据进行处理,再构建模型进行机器学习。
建议:没有太多建议,我当时选这课就是冲着周老师来的。因为之前上过您的组成原理、汇编,感觉虽然课程难度都很大,但是能学到很多知识,老师讲课也很清晰,课件写得也清楚,即使课上不懂课下自学也没问题。

相关文章

  • 数据挖掘期末实验报告

    课程综述(20分) 方法应用(25分) 1.研究背景(Why) 5分 最近在看《Python数据挖掘入门与实践》这...

  • 数据挖掘期末复习

    1. 概要 1.1 为什么要做数据挖掘? 我们生活在大量数据日积月累的年代。分析这些数据是一种重要需求。数据的爆炸...

  • 2018-07-05

    数据挖掘实验报告 实验要求: 对样本进行二分类,获取分类概率 采用方法: 随机森林 方法简介 随机森林就是通过集成...

  • 远程连接Ubuntu服务器MySQL数据库

    前言 数据库系统期末实验报告要设计一个数据库,想在本地用Navicat这类软件尝试连接阿里云上的mysql-ser...

  • 数据挖掘笔记(期末复习用)

    http://47.101.52.166/blog/back/python/%E6%95%B0%E6%8D%AE%...

  • 期末周的实验报告

    又是一个在期末周补实验报告的晚上 加油!

  • 时空数据挖掘

    数据挖掘已经成为当代显学,只要是个公司可能都需要数据挖掘,由此也衍生除了金融数据挖掘、生物数据挖掘、时空数据挖掘、...

  • 随笔

    哇,下学期竟然没有课了,不过还有好多期末作业,和实验报告。

  • 学习笔记--(移动数据挖掘引言)

    移动数据挖掘的定义 移动数据挖掘研究的是基于移动数据的数据挖掘算法。这些数据算法需要更多地利用移动数据特性,挖掘与...

  • 练手的第一个游戏

    《计算机游戏开发》 期末课题实验报告 姓名:李基铭 班级:2014211602 学号:2014212123 指导教...

网友评论

      本文标题:数据挖掘期末实验报告

      本文链接:https://www.haomeiwen.com/subject/orofqctx.html