艾 虎,吴登俊
(1.贵州警察学院,贵州贵阳 550005;2.四川农业大学动物科技学院,四川雅安 625014)
凉山半细毛羊是1995年在高山冷湿地区育成的48~50支半细毛羊品种,于1996年被列入“九五”国家重点科技攻关项目[1-2]。凉山半细毛羊育种过程中,等级评价是重要的环节,高效和准确的质量分级方法非常重要。传统的方式是由鉴定员利用经验进行等级评价,然后与标准比较,最后得出凉山半细毛羊的等级,易受鉴定员的主观影响,而且效率低下[3]。就数学模型而言,传统的数学模型评价分级方法解决不了非线性关系[4],而人工神经网络有高度非线性动态处理能力,且能够自适应、自学习和自组织[5]。
因此,本研究以凉山半细毛羊为例,设计基于Web的概率神经网络凉山半细毛羊评价分级系统。该系统采用概率神经网络分级算法与互联网相结合,使用户能在远程计算机终端上使用凉山半细毛羊评价分级系统,可有效提高评价分级的准确率、统一性、客观性和工作效率。
1.1 凉山半细毛羊评价系统需求分析 凉山半细毛羊评价分级系统多层次数据流如图1所示。
1.1.1 普通用户 普通用户的功能主要包括用户信息管理和使用概率神经网络对凉山半细毛羊数据进行分级和管理分级信息等。
1.1.2 系统管理员用户 系统管理员的功能主要包括凉山半细毛羊评价分级训练数据的管理和普通用户的管理等。
1.2 系统架构 该系统采用3层架构,即表示层、业务层和数据层。表示层包含用户与用户业务之间交互的所有程序逻辑。业务层接收表示层的请求,并基于其所含的业务逻辑,向表示层返回一个结果,主要包括概率神经网络类和其他常规网站需要的C#类。数据层主要保存系统的数据,即概率神经网络分级模型的训练数据和用户的相关数据等,并给业务层发送所需的数据。
2.1 系统结构 凉山半细毛羊概率神经网络评价分级系统主要模块构成如图2所示。
2.2 数据库设计 采用Microsoft SQL Server 2008建立数据库LSSW_DB,需要建成年公羊、成年母羊、育成公羊、育成母羊4 张表。成年公羊数据表的属性如图3所示;成年母羊、育成公羊和育成母羊数据表的属性与成年公羊数据表属性相同,E-R见图4。
图 1 凉山半细毛羊评价分级系统多层次数据流
图 2 凉山半细毛羊评价分级系统各模块构成
图3 成年公羊数据表的属性表示
3.1 实现技术与工具 采用Web的B /S结构模式,应用 ASP.NET技 术, 利 用 C#、JavaScript、T-SQL和CSS等编程语言实现凉山半细毛羊评价分级系统,其中应用了AJAX技术和ADO.NET技术。系统开发平台为Microsoft Visual Studio 2010,数据库管理系统软件为Microsoft SQL Server 2008,运行平台为Windows XP/Windows 2000/Windows Server 2003,运行环境为Microsoft.NET Framework SDK 4.0。
图 4 系统数据库E—R 图
3.2 训练数据的获得 对应成年公羊、成年母羊、育成公羊、育成母羊分别建立1张MSSQL数据表,即AdultRam、AdultEwe、GrowingRam 和 GrowingEwe。根据《凉山半细毛羊标准》[6],在每个指标的每个级别区间中,利用Matlab随机产生8+1个插入值[3],然后加上人工评价分级的成年公羊、成年母羊、育成公羊和育成母羊各5只,所选择的每只羊样本除了羊毛细度级别都为特级以外,毛长、剪毛量和体重的级别均在同一级别上,然后把上述数据输入到数据库LSSW_DB中的上述4张数据表中,供以后使用、添加、更新和删除。
3.3 归一化处理 为了方便数据处理和消除数据中的奇异样本,采用归一化处理把需要处理的数据归一到区间[-1 1]内,使数据无量刚化[7]。归一化公式如公式1所示:
公式中,P为R×Q 样本向量矩阵,Pn为归一化了的R×Q样本向量矩阵,maxp为R×1向量,包含样本向量矩阵P的每个行向量元素中的最大值,minp为R×1向量,包含向量矩阵P的每个行向量元素中的最小值,ones(1,Q)元素全为1的Q维行向量。
用C#创建矩阵类public class MatrixTable,其中包含矩阵归一化处理方法public double[] PreMnmx(double[] P)。对映AdultRam、AdultEwe、GrowingRam和GrowingEwe数据表 ,创建静态类public static class CatalogAcccess和 public static class GenericDataAccess 实现基于参数化存储过程的ADO.NET连接数据库。创建存储过程从选择的数据表中获取数据表DataTable table,table中的字段包括体重、毛长、剪毛量、细度和综合级别。通过转换得到输入向量矩阵P(向量元素为体重、毛长、剪毛量、细度)和输出向量矩阵T(向量元素为综合级别),然后进行归一化处理,得到用于概率神经网络训练的输入向量矩阵double[,] Pn = MatrixTable.PreMnmx(P)和输出向量double[,] Tn = MatrixTable.PreMnmx(T)。
3.4 概率神经网络模块的实现
3.4.1 概率神经网络PNN类的构建 概率神经网络(Probabilistic Neural Network,PNN)是一种径向基神经网络,主要用于模式分类的问题研究,其实质是基于贝叶斯最小风险准则发展而来的一种并行算法,由美国加州Specht[8-9]提出。概率神经网络由4部分组成:输入层、样本层、求和层和竞争层(图5),本研究用C#创建概率神经网络类public class Pnn。
图 5 概率神经网络
3.4.2 概率神经网络的训练 在Pnn类中创建训练函数public void Train(double [,] Pn, double [,] Tn),把归一化了的输入向量矩阵Pn和输出向量Tn输入Pnn中,Pnn.Train(Pn,Tn)即完成训练。向量矩阵Pn构成样本层,每一向量对映一结点,样本层结点的数目等于训练样本数目的总和。在求合层中,输出向量Tn(级别向量)中相同的级别元素构成同一结点,即求合层中结点数等于级别数m。
3.4.3 平滑因子的确定 在概率神经网络模型中,平滑因子σ很重要,太大会导致每个神经元响应区域交叉过多,会带来精度问题,过小会导致过拟合[7]。
本研究采用Matlab的newpnn()函数构建概率神经网络,把上述的训练数据分成数量相等的两部分,一部分用于训练,另一部分用于仿真,通过反复训练与仿真确定平滑因子σ为0.1。然后把平滑因子σ通过概率神经网络训练数据管理页面输入系统,以XML文件保存在服务器中,供分级时调用。通过概率神经网络训练数据管理页面也可随时更新平滑因子σ。
3.4.4 概率神经网络的仿真 首先归一化处理要分级的输入向量Px。具体程序是,把输入向量Px与上述训练数据向量矩阵P合并成向量矩阵Ps,然后用归一化处理方法double[,] Psn = MatrixTable.PreMnmx(Ps)进行归一化处理,得到归一化了的向量矩阵Psn,然后从Psn中提取归一化了的输入向量Pxn。
在Pnn类中创建仿真函数public double[]Sim(double [] Pxn),该函数的返回值为评价分级结果。把要分级的输入向量Pxn输入到输入层中,输入向量Pxn中的每一元素对映输入层一结点。在样本层中,函数Sim计算输入向量Pxn与训练样本向量Pn之间的接近程度值yik,得到样本层的输出向量元素,其值的大小代表这2个向量之间的距离。如公式2所示。
然后,将样本层的输出值yik送入到求和层中,求和层每个结点对应一个凉山半细毛羊的级别。样本层的输出值yik输入到对应的级别的求和层的结点中,求和层的每一个结点对输入值yik进行求和,如公式3所示,得到求和层输出值gi。
最后,由竞争层进行判决的gi中最大的值,其相应求和层的结点的级别就是评价分级结果。double[ ]OutPut=Pnn.Sim(Pxn)结果得到向量OutPut,gi中最大的值对应求和层的结点的级别为OutPut中概率值最大的那一类,其输出结果为1,其余结果都是0。
3.4.5 概率神经网络模块的页面 概率神经网络模块包括概率神经网络分级页面和概率神经网络训练数据管理页面,这2个页面均采用了母板和用户控件,并应用了Ajax技术,Ajax技术由服务器控件ScriptManager和UpdatePanel实现,在概率神经网络分级页面中点击分级按钮时,分级结果页面局部刷新。
概率神经网络分级页面如图6a所示,通过服务器控件DropDownList根据要分级的数据选择相应的羊别,选择完成后页面自动回传,并从数据库中提取相应羊别的训练数据,并对概率神经网络进行训练,然后在页面上填写需要分级的数据,然后点击评价分级按钮,最后得出分级结果。如需要保存分级结果,可点击保存分级结果按钮。
概率神经网络训练数据管理页面如图6b所示,首先根据需要选择羊别,选择完成后页面自动回传,并从数据库中提取相应羊别的训练数据,通过局部刷新服务器控件GridView显示数据,在服务器控件GridView中,可能更新和删除相应的数据。由于训练数据较多,所以采用了分页显示,点击分页按钮可局部刷新GridView中显示的训练数据。分页显示的实现采用了服务器控件Repeater、储存过程、储存过程中的表变量和表变量中的ROW_NUMBER()函数字段。
选择了羊别后,就可以在页面上填写需要添加的训练数据,然后点击添加按钮添加训练数据,训练数据会保存于数据库的相应羊别的数据表中。
概率神经网络训练数据管理页面可以设置和更新平滑因子σ,输入平滑因子σ的值,点击确认按键,平滑因子σ的值以XML文件的形式保存于服务器中,供分级时调用。
3.5 用户模块 用户模块主要包括用户注册、用户登录和用户分级数据管理页面,3个页面均采用了母板和用户控件,用户分级数据管理页面应用了Ajax技术。用户登录页面如图6c 所示,采用服务器控件Login,并设置了登录验证码,有效防止恶意的攻击。用户注册页面如图6d 所示,采用了服务器控件LoginView。用户分级数据管理页面如图6e所示,通过服务器控件DropDownList选择羊别,选择完成后页面自动回传,并从数据库中提取相应羊别的分级数据,通过局部刷新服务器控件GridView分页显示数据。在服务器控件GridView中,可删除相应的分级数据,但不可修改数据。
选择四川凉山半细毛羊原种场的成年公羊、成年母羊、育成公羊和育成母羊,每种羊别中体重、羊毛细度、毛长和剪毛量不在同一级别上的羊各8只共32只,通过概率神经网络分级页面上传数据进行分级,部分分级结果如表1所示,与传统分级结果比较,准确率达97%。
图 6 凉山半细毛羊评价分级系统
概率神经网络是基于统计原理的神经网络模型,与最优Bayes分类器在分类功能上等价,与传统的多层前向网络不同如BP神经网络,是完全前向的计算过程[10]。在逼近能力、分类能力和学习速度等方面,概率神经网络优于传统的BP神经网络[11],由于只有1个散布常数spread,具有较大的计算优势[12]。
本系统的概率神经网络算法和其他重要功能均采用C#类定义,C#是基于对象的语言,其强大之处在于,能够将数据和相关功能集合在类的定义中,这样就可按照生活中的实体来设计软件[13]。
为了减小服务器的负担,同时也减少开发系统的工作量,该系统并未开发确定平滑因子σ的Web模块,而是采用Matlab构建概率神经网络,通过反复训练与仿真确定平滑因子σ为0.1,然后把平滑因子σ输入系统保存为XML文件,供分级时调用。
因为不同羊别同一级别的羊毛细度、毛长、剪毛量和体重有较大差异,所以本研究采用的4 张数据表分别储存成年公羊、成年母羊、育成公羊和育成母羊的数据,分级时对映要分级的数据的羊别提取相应羊别数据表的训练数据,然后训练概率神经网络。储存过程的查询语句不需要带上条件语句,所以查询快,但需要4个用于查询的储存过程。如果只建一张数据表储存成年公羊、成年母羊、育成公羊和育成母羊的所有训练数据,当要训练概率神经网络时,通过储存过程从该数据表中提取相应羊别的数据作为训练数据,这时只需要一个储存过程,但其查询语句需要带上条件语句,由于这张表的数据量相对多,所以查询相对慢,这在网站并发量大时会表现明显。
该系统的页面均采用了母板,母板页可以在整个网站创建并重用,能在页面间精确的复制一些内容[14],减少了开发的工作量,修改也方便,同时也增强了页面的整体效果。部分页面应用了Ajax技术,Ajax局部刷新让系统更加人性化,产生高度交互和动态的Web页面[14]。
该系统采用基于参数化存储过程的ADO.NET连接数据库。应用储存过程,能在数据库架构变更时明显降低中断应用程序的可能性,而且可以最大化的减小SQL注入性攻击的可能性[15]。
可靠性验证分析只用了32份凉山半细毛羊样本数据,与传统分级结果比较准确率达97%,但如果可靠性验证分析样本数据成倍增加,分级结果准确率也许达不到97%,但传统分级并非比概率神经网络分级更接近于真实级别。准确率达97%只是概率神经网络分级与传统分级结果比较而言。
表 1 部分凉山半细毛羊的评价分及结果
本研究采用Asp.net技术,构建概率神经网络凉山半细毛羊评价分级系统,概率神经网络评价分级程序运行于后台服务器,训练数据取自后台服务器数据库,从而保证了评价分级标准的统一性,同时也为修正训练数据提供方便。基于Web的概率神经网络凉山半细毛羊评价分级系统,使用户获得了极大的方便和客观统一的分级结果。
[1] 吴登俊. 培育凉山半细毛羊的启示[J]. 四川草原, 2003 (4):5-9.
[2] 骆佳锐, 刘宁, 刘火石铁, 等. 凉山半细毛羊高效养殖综合技术研究[J]. 中国草食动物科学, 2014(s1):366-369.
[3] 艾虎, 吴登俊. 基于概率神经网络的凉山半细毛羊评价研究[J]. 中国畜牧杂志, 2009, 45(9):1-5.
[4] Stambuk-Giljanovic N. Water quality evaluation by index in dalmatia[J]. Water Research, 1999, 33(16):3423-3440.
[5] 陈永灿, 陈燕, 郑敬云, 等. 概率神经网络水质评价模型及其对三峡近坝水域的水质评价分析[J]. 水力发电学报, 2004,23(3):7-12.
[6] 四川省畜牧食品局. 凉山半细毛羊标准[EB/OL]. 2004-10-14.http://www.scxmsp.gov.cn/HtmlHangYBZ/2006-5/18/20060518 971.html.
[7] 董长虹. Matlab神经网络与应用(2版)[M]. 北京: 国防工业出版社, 2007:122-125.
[8] Specht D F. Probabilistie neural networks for classification mapping or associative memory[J]. IEEE ICNN San Dieg C A,1988, I: 525 -532.
[9] Specht D F. Probabilistic neural networks[C ]. Oxford U K:Elsevier Science Ltd, 1990, 3: 109-118.
[10] 李朝锋, 杨茂龙, 许磊, 等. 概率神经网络与BP网络模型在遥感图像分类中的对比研究[J]. 国土资源遥感, 2004,(4):11-13.
[11] 康耀红. 神经网络模型及其MATLAB仿真程序设计[M].北京: 清华大学出版社, 2005:101-106.
[12] 李杰, 王科, 王航. 基于广义回归神经网络的公路货运量预测方法研究[J]. 交通与计算机, 2007, 25(3):131-133.[13] 特罗尔森. C# .NET 3.5高级程序设计(第4版)[M]. 北京:人民邮电出版社, 2009:108-110.
[14] 麦克唐纳, 兹普兹塔. ASP.NET 3.5 高级程序设计(第2版)[M]. 北京: 人民邮电出版社, 2008:560-1122.
[15] 尼尔森. Server 2008 宝典[M]. 北京: 清华大学出版社,2011:542-555.