开篇:润墨网以专业的文秘视角,为您筛选了一篇基于机器学习理论的软件可靠性预测研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:由于软件可靠性早期预测在测试前就能够使开发和测试的相关人员对软件的可靠性有一定的了解,所以对于软件如何进一步开发、测试和质量的控制都具有十分重要的作用。该文将支持向量机理论引入到软件可靠性早期预测领域中来,提出了基于支持向量机的软件可靠性早期预测模型。通过对比仿真实验,证实了此模型同传统模型相比具有预测精度更高、泛化能力更强、对样本数量的依赖程度更低的特点。
关键词:软件可靠性;早期预测;支持向量机
中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)13-3474-04
1 引言
软件可靠性是指在给定时间内、特定环境下软件无故障运行的概率[1]。软件可靠性早期预测是在未知失效数据时(如在软件生存周期的需求分析、概要设计或详细设计阶段),根据软件产品及其开发过程度量来预测软件系统的可靠性。由于软件可靠性早期预测在测试前就能够使开发和测试的相关人员对于软件的可靠性有一定的了解,可以使管理人员在时间上抢得先机,对软件管理中的费用预算、资源计划、方案确认和质量预报都显得十分重要。
从建模方法上看,目前进行软件可靠性早期预测时多采用多元线性回归或者人工神经网络的方法[2-3]。但是多元线性回归方法只能处理线性关系或者某种变形的线性关系,对自变量和样本的要求比较严格,并且必须保证较大的样本数量。而人工神经网络本身充满着浓厚的经验色彩,理论基础不严格,结构难于确定,并且存在拟合不足或过拟合、容易陷入局部极小点等问题。在小样本条件下,人工神经网络的效果也不够理想。
2 支持向量机理论
支持向量机[4-5]是建立在统计学习理论中VC维和结构风险最小化基础上的一种全新的学习机器。它根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳折衷,以期获得最好的推广能力。采用支持向量机原理解决回归预测问题的基本算法如下:
设训练样本集D={(xi,yi,)|i=1,2,…,n},xi∈E,yi∈R( 是欧氏空间),对于线性回归,回归方程形式如下
f(x)=(w・x)+b (1)
对于一般的回归,它的损失函数为:
L(y,f(x,δ))=|y-f(x,δ) |,δ∈Λ (2)
为了构造回归支持向量机,我们采用一种新的损失函数类型,即ε不敏感损失函数。
L(y,f(x,δ))=L(|y-f(x,δ)|ε) (3)
式中,记:
■ (4)
这种损失函数描述的是这样一种ε不敏感模型,即如果预测值和实际值之间的差别小于ε,则损失等于0。在构造基于支持向量机的回归估计中,我们采用二次ε不敏感损失函数:
L(y,f(x, δ))=|y-f(x,δ)|ε2 (5)
如果把回归估计的问题定义为对上式的ε不敏感损失函数(ε≥)进行风险最小化问题,那么用支持向量机原理解决回归问题,可化为求下式的最小值:
■ (6)
式中
[(w・xi)+b]-yi≤ε+ξi,i=1,…,n
yi-[(w・xi)+b] ≤ε+ξ*i,i=1,…,n
ξi,ξ*i,≥0, i=1,…,n
把上式的凸优化问题转化为在一个二次规划优化中寻找向量w的问题,即找到所求向量■,α*i,αi为拉格朗日乘子,于是式(6)可转化为求解下面的二次规划问题。
■(7)
式中,K(xi,xj)是核函数,同样,可以采用线性核、多项式核、径向基函数(radial basis function,RBF)核、Sigmoid核等形式,支持向量回归估计函数为
■ (8)
总之,采用支持向量机解决回归函数估计问题,必须首先确定三个自由参数:调整因子C、ε不敏感系数以及核参数(多项式核的阶数、径向基核的宽度参数,样条生成核的样条阶数,等等),然后采用上述支持向量回归方法进行估计。
3 基于支持向量机的软件可靠性早期预测模型
通过引入支持向量机的方法,本文提出了基于支持向量机的软件可靠性早期预测模型。该模型的建立步骤如下:
1) 选取模型输入的指标。首先根据经验列出所有对该单位开发的软件的可靠性可能产生影响的因素,然后将这些因素进行聚类分析,产生等价类。一个等价类实际就是构造一个主要因素的基础。
2) 数据采集。对于形式化程度比较高的部分,一般采用自动化工具;自动化工具无法采集到的数据,可以人工测量计算。
3) 对数据进行预处理。主要包括数据标准化处理、主成分分析、特异样本点的判定和数据归一化。
4) 模型形式和核函数的选择。
支持向量回归的模型形式有epsilon-SVR和nu-SVR两种[6-7]。本文模型的形式采用epsilon-SVR。
核函数类型的选择与所应用的领域有关,经常使用的核函数主要有线性核、多项式核、径向基函数(radial basis function,RBF)核以及Sigmoid核4种。本文选择RBF(Radial Basis Function)作为核函数。
5) 模型参数和核参数的选择。模型中涉及到的参数有四个:调整因子C、不敏感系数ε、宽度参数γ和停止精度参数e。本文提出的参数选择算法可由图1表示。
在选择一组合理参数的过程中,有两个基本的问题需要解决:
① 如何衡量使用特定参数的模型的预测精度?
为了能够体现模型对未知数据的预测能力,评价其泛化性能,我们使用一种称为交叉验证(Cross Validating)的技术。
在n重的交叉验证中,训练集I被分成大小相等的n个子集I1,I2,…,In。对于给定的参数(C,ε,γ,e),执行以下步骤:
第1步使用I1作为测试集,I1,I2,…,In作为训练集,得到预测精度a1。
第2步使用I2作为测试集,I1,I2,…,In作为训练集,得到预测精度a2。
… …
第n步使用In作为测试集,I1,I2,…,In作为训练集,得到预测精度an。
最后的得到对于给定参数(C,ε,γ,e)的预测精度
■
交叉验证采用相互交叉预测取平均值的方法,用对测试集的预测精度来体现模型的预测精度,能够防止过拟合问题的发生,有利于提高模型的泛化能力。
② 如何在解空间中进行搜索?
本文采用的是深度优先的非启发式搜索算法[8]。之所以没有采用其它启发式算法,主要是出于以下几个原因的考虑:首先,人们在心理上觉得启发式算法得到的总是一些近似解,可能会遗漏最优解;其次,本文中涉及到的参数一共是4个,即对应一个R4的一个(比较小的)子空间。由于参数个数不是很多,非启发式算法的计算时间并不比那些先进的启发式算法长多少;再者,非启发式算法有利于实现并行计算,因为参数C、ε、γ和e是独立的。
尽管如此,做一个完整细致的搜索仍然是很费时间的,所以我们使用逐步求精的方法来实现。首先做一个比较粗糙的搜索,得到几个比较好的区域。然后在这些区域上做进一步的更细致的搜索,以获得更好的效果。
6) 将待预测的数据输入模型,得到预测结果。
4 对比仿真实验
为了评价新模型的性能,以及同传统模型相比的优势和劣势,我们安排了若干组对比仿真实验。这里,以一个商业软件系统为例说明,表 1列举了该商业软件系统的17个模块的若干度量元以及模块缺陷数。表中SN表示模块编号,LOC表示模块规模(单位是行代码数),FO表示模块扇出,FI表示模块扇入,PATH表示模块控制流路径,FAULTS表示模块缺陷数。因为是同一个软件系统的不同模块,所以可以认为这些模块都是在相似的环境(开发方式、管理水平和开发人员素质)下开发出来的,符合前面模型的假设。我们的实验分成两部分。