地理信息系统二次开发实例教程-c#+ArcGis
地理信息系统二次开发实例教程-c#+ArcGis面,包括需求分析、数据管理设计、用户界面设计、设计模式在软件开发中的应用。在开发过程中应用软件工程技术,可以提高软件开发效率和质量。第章“需求分析”介纽了“北京市地理信息公众查询系统”的需求分析,包括需求概述、功能需求以及功能需求详细描述。第章“系统总体设计”介绍了系统平台选择、系统总体框架、系统数据组织及系统开发进度安排等。第章“系统详细设计”根据系统的总体设计结构分别从北京市地理信息公众查询系统的数据库设计和一些相关类的设计两方面米详细阐述系统的设计。第章“系统主界面的实现”首先简单介绍的功能、特点、结构及其数据源,然后介绍如何设计系统的主界面及主要实现代码。第章“选择与査询功能的实现”主要介绍如何通过查询与数据集有关的衣从数据中获取信息,以及如何通过空间和逻辑的查询方法从数据中获取信息。第章“系统其他辅助功能”介绍了系统中其他一些辅助功能的实现,例如当鼠标移动到某地物上并稍做停留后,岀现一个小标签,显示该地物的名称,以及距离量算、面积量算的实现,等等。为了让读者更加全面地掌握的廾发,第章介绍了“北京市地理信息公众査询系统”开发过稈中没有涉及到的一些对象,包括投影对象、地址匹配对象、动态跟踪层(对象与地理事件()对象。科海网站提供了本书涉及的所有源代码,以及实现书中内容所需的所有组件。读者可以从中下载这些资料。由于时间仓促,书中难免有一些错误、遺漏,恳请读者谅解,并提出批评和指正编者2004年5月日录第章地理信息系统软件工程软件工程简介基本概念软件系统开发过程开发过程模型需求分析需求获取需求规约数据管理设计全部采用文件管理文件结合关系数据库管理全部采用关系数据库合理采用面向对象数据库管理用户界面设计界面设计原则界面设计中的要素界面样式应用模式与开发方式应用模式开发方式“北京市地理信息公众查询系统”介绍第章需求分析需求概述功能性需求系统体系结构用户描述具体功能需求非功能性需求功能需求详细描述第章系统总体设计系统平台选择便件平台目录系统操作平台数据库平台系统川发模式与组件选择开发工具系统总体框架系统功能框架系统数据库系统的川发结构系统界面组织系统数据组织系统数据的逻辑组织系统的主要数据类型进度规划第章系统详细设计数据库详细设计地名分类编码元数据表结构电子地图数据系统相关类的详细设计辅助类的详细设计类的详细设计类的详细设计类的详细设计类的详细设计第章系统主界面的实现简介的功能的特点的结构的数据源建立项目加入地图控件加入其他引用创建位图资源主窗体的实现界面设汁基本编码类的初步实现目录辅助类的实现类的成员变量读取元数据创建主窗口中的工作区创建I作区创建“地图”选项卡创建“查询”选项卡创建“帮助”选项卡图层的加入与控制在地图中加入图层依据比例尺控制图层显小通过“地图”选项卡控制地图显示控制显示的地物类型控制地图显示区域地图的放大、缩小、全图显示和漫游其他辅助功能的实现鹰眼功能的实现显示经纬度第章选择与查询功能的实现选择地物查询地物信息地名查询查找最近地物公交查询公交站点与线路查询乘车路线询地名索引查洎绀果的定位与更详细信息最短路径查询第章系统其他辅助功能地名的快速显示距离量算与面积量算其他工具栏按钮功能的实现地图输出子系统的实现在线帮助子系统的实现第章的其他对象动态跟踪层对象与对象目录对象的属性对象的方法对象的属性对象的方法实例应用投影对象坐标系地图投影地理编码用于地址匹配的专用文件绘制街道文件地理编码对象地址定位对象地址标准化对象交耳式地址兀配批地址匹配第章地理信息系统软件⊥程在地理信息系统(开发过程中应用软件工程技术,可以提高软件开发效率和质量。本章首先介绍了软件工程的基本概念、软件系统开发过程和开发过程模型。然后讲述了软件工程技术在系统廾发中的应用:需求分析、数据管理设计、用户界面设计、设计模式在软件开发中的应用。这些方面涉及了开发过程中的不同阶段及不同层次,有些方法之间是互斥的,如和方法,但是软件工程技术最重要的特点是实用,开发者可以根据只体情况选用不同的技术。软件工程简介基本概念计算机软件工程是一类求解工程。它应用计算机科学、数学、工程科学及管理科学等原理,借鉴传统工程的原则、方法创建软件,以达到提高软件质量、降低开发成本的目的。其中,讣算杋科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于管理计划、资源、质量、成本等。从学科角度来看,软件⊥程是·门指导计算机软件开发和维护的上程学科。软件工程的提出是为了解决世纪年代出现的软件危机,当时在大型软件开发项日中存在着成本髙、开发进程不易控制、开发工作量难于估算、软件质量低、项目失败率高等诸多闩题,给软件行业带来了巨大的沖击。软件工程提出了一系列理论、原则、方法及工具,试图解决这种软件危机。和其他工程一样,软件工程有自己的目标、活动和原则,其框架可以概括为图所示的内容。分多//算持开发范型需现设计方法支持过程求管理过程图软什工稈框架第章地理信息系统软件工程软件工程的目标可以概括为“生产具有正确性、可用性及开销合宜的宀品”,其活动包括需求、改计、实现、确认及支持等。围绕工程设计、支持及管理,软件工程有以下条基本原则:)选取适宜的廾发模型。选取适宜的廾发模型可以利」认识需求易变性并加以控制以保证软件产品满足用户的需求〔)采用合适的设计方法。通常要考虑实现软件的模块化、抽象与信息隐藏、本地化致性及适应性等特征。()提供高质量的工程支持。在软件工程中,软件工具与环境对软件过程的支持颇为重要。()重视开发过稈的管理。开发过程的管理直接影响可用资溟的有效利用、最终的软件产品的满意度,软件组织的生产能力等问题。只有对开发过程实施有效管理,才能实现有效的软件工程软件工程把软件工程的思想和方法应用于软件的开发过程。如前所述,软件工程活动包括需求、设计、实现、确认及支持等,它们对应」软件廾发过程的不同阶段。般来说,软件开发都要经历从分析设计到实现确认的过程。每个阶段按照相应的规范进行工作,并得到该阶段的成果,是保证整个开发过程戊功的关键。软件系统开发过程前面讲过,软件工程活动包括需求、设计、实现、确认及支持,它们对应于整个软件开发过程的不同阶段。需求分析需求分析阶段处于软件开发过程的前期,其基本活动是准确定义未来系统的目标,确定为满足用户的需求必须做什么。需求分析又划分为两个阶段,即需求获取和需求规约前者用自然语言清楚地描述用广的需求,而后者的目的是消除获取需求的二义性和不致性。在软件项目的生命周期中,一个错误发现得越晩,修复错误的代价也越髙,所以,高质量的需求工程是软件项目得以正确、高效完成的前提。对于系统分析人员,建立需求面临着以下个方面的困难:·问题空间的理解系统开发人员通常是计算机专业人员,难以深入理解各种业务系统所憂解决的问题空间。人与人之间的通信对于系统分析人员而言,通信主要包括同用户的通信以及同事之间的通信,由于自然语言的二义性,会给准确刻田需求造成障碍。·需求的不断变化造成需求变化的原因很多,包括技术、用户方、市场等等。作为分析人员,必须采用些策咯以适应变化。面向对象的分析方法被认为是解决上述闲难的较好技术,但是完整、准确地刻划问题空间始终是分析人员所面临的挑战第章地理信息系统软件工程系统设计一般来说,需求分析阶段的主要任务是确定系统“做什么”,而系统设计阶段则要解决“怎么倣”的问题。系统设计的任务是将系统分析阶段提出的逻辑模型转化为相应的物理模型,其设计的内容随系统的目标、数据的性质和系统的不同而有很大的差异。一般前言,首先应根据系统的目标,确定系统必须具备的空间操作功能,称为功能设计;其次是系统的建模和产品的输出,称为应用设计。系统设计是系统整个开发工作的核心,不但要完成熤辑模型所规定的任务,而且要使所改计的系统达到优化。所谓优化,就是选择最优方案,使系统具有运行效率高、控制性能好和可变性强等特点。要提高系统的运行效率,般要尽量避免中问文件的建立,减少文件扫摧的遍薮,并尽量采用优化的数据处理算法为增强系统的搾制能丿,要拟定对数字和字符岀错时的校验方法;在使用数据文件时,要设置口令,防止数据泄密和被非法修改,保证只能通过特定的通道存取数据。为了提高系统的可变性,最有效的方法是釆用模块化的方法,即先将氅个系统看成一个模块,然后按功能分解为若干个子模块。一个模只执行一种功能,一种功能只用一个模垗实现,这样设计出来的系统才能做到可变性好并具有生命力。功能设计又称为系统的总体设计,它的主要仟务是根据系统的目标来规划系统的规模,确定系统的各个组成部分,并说明它们在整个系统中的作用与相互关系,以及确定系统的硬件軋置,规定系统采用的合适技术规范,以保证系统总体目标的实现。图给出了通用的总体设计结构图。因此,系统的总体设计大致包括数据库设计硬件配置与选购软件设计等应用设计又称详细设计。详细设计包括详细的算法、数据表示和数据结构、实施的功能和使用数据之间的关系。详细改计过程中采用了一些工只,以便对数据、算法等进行描述,包括流程图、,问题分析图)、盒图(图)、伪码实现阶段软件实现阶段将设计的结果变换成程序设计语言编写的程序。一般情况下在实现阶段,首先要确定程序改计语言,其影响因素包括:开发人员对语言的熟悉程度、语言的可移植性、编译程序的效率、编译工具的支持等等。目前,语言是被普遍采用的构造系统软件的编程语言,而则更多地应用于编写网络应用程序。无论采用哪一种编程语言,都要求编写高质量的源稈序代码,稈序质量通常包含正确性、可读性、可移植性、程序效率等指标。考虑到系统的维护和演化,提髙源程序的可读性是实觋阶段的一个重要目标,其途径包括添加注释、规范书写格式、确定标认符命名原则、采用结构化的程序设计方法(不用或减少使用语句)等。
- 2020-12-05下载
- 积分:1
word2vec_中的数学原理详解
word2vec_中的数学原理详解个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!wordzvec中的数学hoty@163.com2014年7月目录前言2预备知识2.1 sigmoid函数2.2逻辑回归3 Bayes公式2.4 Huffman编码,,,,,,,,524.1Humu树242 Huttman树的构造62.4.3 Huffman编码..,.3背景知识3.1统计语言模3.2n-gram模型103.3神经概率语言模型123.4词向量的理解4基于 Hierarchical softmanⅹ的模型41CBOW模型..191.1.1网络结构41.2梯度计算201.2 Skip-gram模型42.1网络结构42.2梯度计算255基于 Negative sampling的模型285.1CBOW模型285.2 Skip-gram模型53负采样算法326若干源码细节346.1a(x)的近似计算62词典的存储63换行符3564低频词和高频词366.5窗口及上下文3766自应学习率3767参数初始化与训练386.8多线程并行3869几点疑问和思考11m3881前言word2vec是 Google于2013年开源推出的一个用于获取 word vector的工具包,它简单、高效,因此引起了很多人的关注,由于word2vec的作者 Tomas nikolov在两篇相关的论文(,[4)中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟第一次接触word2ve是2013年的10月份,当时读了复且大学郑骁庆老师发表的论文7,其主要工作是将SENA的那套算法(8])搬到中文场景.觉得挺有意思,于是做了一个实现(可参见[20),但苦于其中字向量的训练时间太长,便选择使用word2we来提供字向量,没想到中文分词效果还不错,立马对word2vec刮目相看了一把,好奇心也随之增长后来.陆陆续续看到∫word2ve的一些具体应用,而 lomas nikolov团队本身也将其推广到了句子和文档(),因此觉得确实有必要对word2vec里的算法原理做个了解,以便对他们的后续研究进行追踪.于是,沉下心来,仔细读了一回代码,算是基本搞明臼里面的做法了.筼一个感觉就是,“明明是个很简单的浅层结构,为什么被那么多人沸沸扬扬地说成是Decp Learning呢?”解剖word2vec溟代码的过程中,除了算法层面的收获,其实编程技巧方面的收获乜颇多.既然花了功夫来读代码,还是把理解到的东西整理成文,给有需要的朋友提供点参考吧在整理本文的过程中,和深度学习群的群友北流浪子(15,16)进行了多次有益的讨论在比表示感谢另外,也参考了其他人的一些资料,鄱列在参考文献了,在此对他们的工作也并表示感谢2预备知识本节介绍word2vee中将用到的些重要知识点,包括 sigmoid函数、 Beyes公式和Huffman编码等821 sigmoid函数sigmoid函数是神经网络中常用的激活函数之一,其定义为1+e该函数的定义域为(-x,+x),值域为(0,1).图1给出了 sigmoid函数的图像0.5图1 sigmoid函数的图像sigmoid数的导函数具有以下形式)=0(x)1-0(x)由此易得,函数logo(a)和log(1-0(x)的导函数分别为log o(a)(21)公式(2.1)在后面的推寻中将用到822逻辑回归生活中经常会碰到二分类问题,例如,某封电子邮件是否为垃圾邮件,某个客户是否为在客户,某次在线交易是舌仔在诈行为,等等.设{(x,)}1为一个二分类问题的样本数据,其中x∈R",∈{0,1},当1=1时称相应的样本为正例,当v=0时称相应的样本为负例利用 sigmoid函数,对于任意样木x=(x1,x2,…,xn),可将二分类问题的 hypothesis函数写成h(x)=0(o+61x1+622+…+nxn),其中0=(0o,01,…,O)为待定参数.为了符号上简化起见,引入x0=1将x扩展为(x0,x1,x2,…,xrn)},且在不引起混淆的情况下仍将其记为ⅹ.于是,he可简写为取阀值T-0.5,则二分类的判别公式为1,b(x)≥0.5y(x0.5那参数θ如何求呢?通常的做法是,先确定一个形如下式的整体损失函数∑co(x,v)然后对其进行优化,从而得到最优的參数θ实际应用中,单个样本的损失函数cost(x,)常取为对数似然函数cosl(xi, yi)),v-1;(1-(x),v=0注意,上式是一个分段函数,也可将其写成如下的整体表达式cost(x2,3)=·log(ho(x)(1y1)·log(1h(x)323 Baves公式贝叶斯公式是英国数学家贝叶斯( Thomas Bayes)提出来的,用来描述两个条件概率之间的关系.若记P(A),P(B)分别表示事件A和事件B发生的概率,P(AB)我示事件B发生的情况下事件4发生的慨率P(A,B)表示事A.B同时发生的概率.则有P(AB)P(B), P(BLA)=P(A, B)P(A, B利用上式,进一步可得P(B AP(AB)-P(A)P(B)这就是 Bayes公式g2.4 Huffman编码本节简单介绍Humn编码(具体内容主要来白百度百F的词条.[10),为此,首先介绍Huffman树的定义及其构造算法§24.1 Huffman树在计算机科学中,树是一种重要的非线性数据结构,它是数据元素(在树中称为结点)按分支关系组织起来的结构.若干棵互不相交的树所构成的集合称为森林.下面给出几个与树相关的常用概念·路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层号为1,则从根结点到第L层结虑的路径长度为L-1●结点的权和带权路径长度若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权结点的带权路径长度是指,从根结点到该结点之间的路径长度亐该结点的杈的乘矾·树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和二叉树是每个结点最多有两个子树的有序树.两个子树通常被称为“左子树”和“右子树”,定义中的“有序”是指两个子树有左石之分,顺序不能颠倒给定n个权值作为n个叶子结点,树造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称为 Huffman树82.4.2 Huffman树的构造给定m个权值{mn,m2;…,mn}作为二叉树的m个叶子结点,可通过以下算法来构造颗 Huffman树算法2.Ⅰ(Hu「man树构造算法)(1)将{1,2,……,wn}看成是有n棵树的表林(每树仅有一个结点)2)在森林中选出两个根结,的权值最小的树合并,作为-棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和〔3)从森林中燜除选取的两樑树,并将新树加入森林(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求的 luffman树接下来,给出算法2.1的一个具体实例例2.1假设2114年世界杯期间,从新浪毀博中抓取了若干条与足球相关的微博,经统计,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词岀现的次薮分别为15,8,6,5,3,1.请以这6个词为叶子结点,以相应词频当权值,构造一棵Hu∥n树.⊙Q⑨Q⊙只66如→只只③⊙图2 Huffman树的构造过程利用算法.,易知其枃造过程如国g所示,团中第六步给出了最终的 Hutman树,由囚可见词频越大的词离根结点越近构造过程中,通过合并新増的结点被标记为黄色.由于每两个结点邡要进行一次合并,因此,若叶子结点的个数为η,刘枃造的H們πω树中新増结点的个数为π-1.本例中n6,因此新增结,的个数为5注意,前面有捉到,二叉树的丙个子树是分左右的,对于某个非叶子结点来说,就是其两个孩子结点是分左右的,在本例中,统一将词频大的结点作为左孩子结点,词频小的作为右孩子结点当然,这只昃一个约定:你要将词頻大的结点作为右孩子结点也浸有问题§24.3 Huffman编码在数据通倍中,需要将传送的文宁转换成二进制的字符串,用0,1码的不同排列米表示字符.例如,需传送的报文为“A上 TER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为84,5,3,1,1,现要求为这些字母设计编码要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制(23=8>6),可分别用000.001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码显然编码的长度取决报文中不同字符的个数,若报文中可能出现26个不同字符,则固定编码长度为5(2=32>26).然而,传送报文时总是希望总长度尽可能短.在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、7,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码.为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符編码的前缀),可用字符集中的每个宇符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的岀现频率作为字符结烹的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是颎率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度,效果上就是传送报文的最短长度.因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的Hman树的问题.利用 Hultman树设计的二进制前缀編码,称为 LuminaL编码,它既能满足前缀编码的条件,又能保证报文编码总长最短本文将介绍的word2ve工具中也将用到 Huffman编码,它把训练语料中的词当成叶子缩点,其在语料中出现的次数当作权值,通过构造相应的 Huttman树来对每一个词进行Huffman编码图3给岀了例2.1中六个词的 Huffman编码,其中约定(词频较大的)左孩子结点编码为1,(词频较小的)石孩子编码为θ.这惮一米,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词的 Huffman编码分别为0.111,110,101,1001和10000我告欢巴匹0足球图3 Huffman编码示意图注意,到目前为止,关于 Huttman树和 Huttman編码,有两个约定:(1)将权值大的结点作为左孩子结点,权值小的作为右孩子结点(2)左孩子结点编码为1,右孩子结点编码为0.在word2vec源码中将权值较大的孩子结点编码为1,较小的孩子结点编码为0.为与上述约定统一起见,下文中提到的“左孩了结点"都是指权值较大的孩了结点83背景知识word2vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系,为此,不妨先了解一些语言模型方面的知识83.1统计语言模型当今的互联网迅猛发展,每天都在产生大量的文本、图片、语音和视频数据,要对这些数据进行处理并从中挖掘岀有价值的信息,离不开自然语言处理( Nature Language processing,NP)技术,其中统计语言模型( Statistical language model)就是很重要的一环,它是所有NLP的基础,被广泛应用于语音识别、机器翻译、分词、词性标注和信息检索等任务.例.1在语音识别糸统中,对于给定的语音段Vire,霄要找到一个使概率p( TertVoice最大的文本段Tert.利用 Bayes公式,有P(Teat voice)p(VoiceText). p(Textp(Voice)其中p( CicetE.c)为声学模型,而 elEct)为语言模型(18])简单地说统计语言模型是用来计算一个句子的概率的概率模驷,它通常基于一个语料库来构建.那什么叫做一个句子的概率呢?假设W=m1:=(m1,2,…,mr)表示由T个词,2,……,按顺序构成的一个句子,则1,c2…,w的联合慨率p()=p(x1)=p(01,t2,…,r)就是这个句子的概率利用 Bayes公式,上式可以被链式地分解为p(uh)-p(1)·p(u2lu1)p(u3lu2)…p( wru-1),(3.1)其中的(条件)概率p(1),p(2t1),p(un),…,p(mr1-)就是语言模型的参数,若这些参数已经全部算得,那么给定一个句子U1,就可以很快地算出相应的p(1)了看起来奷像很简单,是吧?但是,具体实现起来还是有点麻烦.例如.先来看看模型参数的个数.剛刚才是考虑一个给定的长度为T的句子,就需要计算T个参数.不妨假设语料库对应词典D的大小(即词汇量)为N,那么,如果考虑长度为T的任意句子,理论上就有M种可能.而每种可能都要计算T个参数,总共就需要计算TN7个参数.当然,这里只是简单估算,并没有考虑重复参数,但这个量级还是有蛮吓人.此外,这些概率计算好后,还得保存下来,因此,存储这些信息乜需要很大的內存开销此外,这些参数如何计算呢?常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场、神经网络等方法,本文只讨论n-gram模型和神经网络两种方法.首先来看看 n-gram模型
- 2020-12-04下载
- 积分:1