《基于深度学习的高传染性疾病预测系统》需求分析心得

项目名称:基于深度学习的高传染性疾病预测系统

队名:发量和我作队

队员:殷浩翔 肖欣 刘佳雨 马诗丹 张楠

指导老师:胡军

撰稿人:殷浩翔 肖欣 刘佳雨 马诗丹 张楠

审稿人:殷浩翔


综述

本项目为基于深度学习的高传染性疾病预测系统,通过使用深度学习模型,在Web应用中与用户进行实时交互,并且通过前端的逻辑使用户制作图模型,与同时发送消息到后端与数据库进行交互,使得用户可以通过设置初始的参数来查看一个疾病传染案例(本质为多结点的图)的预测结果。

 

需求分析过程

需求分析是一个软件开发过程中的核心任务之一,在这个阶段我们需要对项目将要展现的结果有一个整体的把握,将要给用户展示的和实现的功能进行分析和整理,确定需求,最后形成一个完整清晰的文档,以便于后续的软件开发。

在需求分析阶段,我们首先和指导老师进行了沟通交流,确定了核心需求。因为我们是一个偏算法的项目,所以在需求方面我们能够呈现的东西并不多,在这里就需要我们进行一些需求挖掘。之后的一周我们对整个项目将要呈现的最终结果做了一个预设。之后我们从实际细节挖掘项目需求,优化完善我们的整个设计,在原型界面设计的同时,我们也同时进行了细节化的需求分析,挖掘出一些创新点,尽量使需求挖掘做到全面准确。

在需求分析和原型设计过程中,我们发现最简单有效的方式是从用户角度进行需求挖掘。在本项目中,我们的目标用户分为了三类:普通用户、管理员、超级管理员;他们存在着泛化的关系。我们在设计的时侯,首先着重从普通用户角度结合我们项目将要实现的实际功能进行了需求分析,比如用户设置参数、模拟案例、查看预测结果等,再从用户体验角度进一步进行需求挖掘,比如保存到新案例、保存到已有案例、继续编辑案例等。从系统管理者的角度,我们使用了常规的管理系统模式,对用户资料、已创建案例进行管理;增加超级管理员身份进行权限管理。从三种身份的用户角度进行需求挖掘,至此,我们的需求分析阶段基本完成。

 

分模块重点讲解

算法模块:

算法部分的需求分析主要是对于算法的选择。

最终我们选择的算法是ConvLSTM(Convolutional Long short-term memory),基于长短记忆力循环单元的卷积神经神经网络。但是在选择了这个算法之前我们进行了许多的考量。

首先是知识部分,由于涉及到了深度学习对于现实世界的数据进行处理,因此我意识到之前的知识是不够用的,除了重新读了一遍周志华教授的《机器学习》与学习Coursera平台上的<Graph Model>之外,我将深度学习的圣经<Deep Learning>这本书尽量挤时间用了很久去读完了大部分章节。

深度学习框架Pytorch的学习并不容易,但是在这篇博客里不述。

首先在不同城市间的疾病预测实质上是一个关于图的问题,并且这个图是时序相关的。所以基于这两点我从下面几个方式进行了论文与书籍的考察。下面是部分论文:

  1. 图本身的预测可以从几个角度来进行接近,例如贝叶斯网,马尔可夫网,条件随机场等概率论相关图结构或者是深层的MLP,卷积神经网络对于图进行多维的类似于不同非线性组合使得在低维的情况下,我们可以对一个高维上拟合的在低维进行近似。

   

2.同时由于是时序的数据,同样有着不同的解决方式,举例来说是马尔科夫链等的数学方法,循环神经网络,长短记忆力循环神经网络,GRU等深度学习的方法。

3.由于图的本质与图像预测比较相似(都为4维的张量->即2维的矩阵对于同一属性,第3维对应不同的属性,图像的RGB通道或是预测图内的不同属性,例如感染人数,总人数),因此我也对于图像预测的论文进行了考察,与上述的CNN等方法结合的确可以找到许多相似的地方。

下面简要来说明一下我们为什么要选择ConvLSTM。在这些年的深度学习的进展中,特别是循环神经网络和LSTM对于预测数据的拟合效果是很好的。

如果我们有一个合理的模型和足够的数据来训练深度的模型,可以获得很好的效果。同时在计算机视觉领域有学者通过循环卷积神经网络关系对于空间关系进行了模拟,我们前文中提到实际上图的结构和视频是非常相似的,所以与之相似,我们可以使用循环卷积神经网络对于空间进行建模。同时,对于序列预测的FC-LSTM对于时空序列的预测也有着不错的效果。因此将两者结合起来对于时间空间的数据进行建模就会变得非常有力。

 

登陆注册模块:

在分析登录注册界面的需求时,我们想到应该提供用户名及手机号两种注册方式,并且在登录时应该提供记住密码的功能。同时还有更为重要的就是安全性,将密码直接放到数据库存在很大的安全隐患。黑客可以通过简单的攻击就查看到那些账户密码,而内部人员也有可能会接触到数据库,所以我们需要通过某种方式,对密码进行一些混淆,在加密术语中称为加盐。

加盐加密是一种对密码的加密方式,它实现的方式是将每一个密码同一个叫做”盐“的n位随机数相关联。无论何时只要密码改变,就为它生成一个新的盐。盐以未加密的方式存放在数据库中,每次将盐和真正的密码结合起来后再加密放在数据库中,这样即使被读到,也不会知道真正的密码。

目前最常见的破解密码的方法是字典破解和暴力破解,也就是猜密码,但也有一种更高效的破解方式——查表法。查表法是现将一些比较常用的密码的哈希值算好后,建立一张表,随着密码的越来越多,表也就越来越多,而在破解密码时,只要知道了它的哈希值,就可以在这个表里去查找该哈希值,如果找到了,就知道相应的密码了。而这种破解方法对使用随机生成的盐加密的方法是很难攻破的。

  当然,在用户输入时,也应该在前端就先进行初步的验证,来确保是一串符合规定的字符和数字,不应包含空格、特殊符号等。

  通过这些措施,我们能一定程度上提高用户的账户安全性。

  前台画布模块:

对于前台,我们提供一个画布供用户操作,同时分别在左侧和后侧设置工具栏和信息栏,在工具栏中,我们提供了“新建节点”、“连接节点”、“设置参数”、“开始/停止模拟”、“保存案例”、“我的案例”等操作,这些全部都用按钮来实现,用户可以选择其中的某一个,并在画布上做出相应的操作,而在后侧的信息栏,会显示用户设置的城市的名称、人口,道路的信息。

并且,在画布的右上角,我们还设置了一些附加功能,包含“示例”、“模型可视化”、“修改密码”、“注销”,这些功能也是通过按钮来实现的。而对于一些网页程序的基本功能也都有实现,在网页的上部,我们设置了一个皮肤图标,用户可以选择我们预设好的几个主题,而这会修改上部以及之前提到的按钮的颜色。还会显示用户的头像,用户名等基本信息,也设计了一个按钮供用户进入个人中心。

  后台管理模块:

针对管理员的需求,我们大致分为这几个部分。首先管理员需要对使用该系统的用户信息有一定的了解。其次对于用户使用该系统建立的案例也要有分析和展示,对于比较有特色的案例,可以对相应的用户添加备注,方便下次查询。管理员还可以对传染病的预测模型有所了解,了解模型的流程步骤等等。而这些数据都是属于动态数据,需要从数据库中获取和更新。当然管理员也是具有和用户一样的功能,即创建案例,得到案例的预测数据的。除此之外,还有一个超级管理员账号,设置用户的权限,可以编辑管理员的个数,这样使得整个系统更加合理。

   

  

所以在建立后台的原型设计时,在用户管理模块需要用一个数据表格,用来显示用户的基本信息:用户昵称、用户手机号、创建时间、案例个数、用户备注等等。对于每一个用户可以进行编辑和删除,“编辑”并不可以修改用户的个人信息,仅可对用户进行备注说明。在案例管理模块,也是用一个数据表格来显示用户的案例信息,点击“查看案例”可以查看该用户所有的案例,以及对应案例的基本参数信息,包含该案例的初始总城市个数、总道路条数、总感染人数,点击该案例可以进入案例的初始模拟状态。针对预测模型的部分,在分析客户的需求后,我们将该部分使用轮播图的方式向管理员进行展示。

针对超级管理员,我们可以在点击用户编辑按钮之后,对该用户进行权限设置,可以将用户的身份设置成管理员,也可以将管理员的身份去除。

 

心得体会

这是第一次真正接触项目,也是第一次对项目做需求分析。需求分析,实际上就是从客户希望实现的功能角度出发,考虑开发过程中的技术性、实现性,最终实现确定的需求。需求分析的过程其实远比自己想象中的要复杂,对于客户的需求不能一次性得到理解,但是在这个过程中,与客户的交流,与组员内部的讨论,自己对项目的了解也在一步一步的深入和加强,同时也验证了一个真理,需求总是在不断变更的,每一次的讨论都是对上一次结果的重塑。所以在做需求分析前,需要做好不断变更不断修改的准备。下面是两点感悟:

(1)需求分析要准确,完整,细致

前期,对于整个项目的用户需求还比较模糊,只对系统的功能有一个概述,没有细化到具体的操作细节。在进行原型设计的同时,我们也同时进行了用户分类,并按用户分类来搭建原型,在每个用户类型下,我们进行了细节化的需求分析,挖掘出一些将来可以实现的创新点。在后期的数据库设计中,还增加了一些可以实现的功能去优化我们的用户体验。在项目开发过程中,需求分析是前期最重要的一环,完整细致的需求分析会让后期的软件开发过程有更加明确清晰的目标;需求分析也必须准确,否则可能会导致项目轨道偏离正确的路线。

(2)需求是不断变化的

我们应该明确需求永远是变化的,在软件开发过程中,我们就应该考虑到一些未来可能需要扩展的需求,虽然现在可能无法考虑到全面具体的需求,但我们应对软件进行可扩展的架构设计,能够在对现有系统影响最小的情况下,同时能保持可持续扩展和稳定提升的能力。一个具备良好可扩展性的架构设计应当符合开闭原则(OCP):对扩展开发,对修改关闭。

posted on 2020-11-15 21:42  Dawson君  阅读(370)  评论(0)    收藏  举报