近年来,支持向量机(SVM)理论广泛应用于模式分类,然而影响其分类准确率的两个主要因素特征选择和参数优化又是相互影响和制约的。文章提出一种BA + SVM算法,利用蝙蝠算法(BA)来同步完成SVM的参数优化和输入数据的特征属性选择,提高了SVM的分类能力。设计的三种实验方式在10个测试数据集上实验结果表明,BA + SVM同步优化算法与单一进行参数优化或单一进行特征选择算法相比,具有输入特征少分类准确率高的优势。 Support vector machines (SVM), which is a popular method for pattern classification, has been recently adopted in range of problems. In training procedure of SVM, feature selection and parameter optimization are two main factors that impact on classification accuracy. In order to improve the classification accuracy by optimizing parameter and choosing feature subset for SVM, a new algorithm is proposed through combining Bat Algorithm (BA) with SVM, termed BA + SVM. For assessing the performance of BA + SVM, 10 public data-sets are employed to test the classification accuracy rate. Compared with grid algorithm, conventional parameter optimization method, our study concludes that BA + SVM has a higher classification accuracy with fewer input features for support vector classification.
何凡,卢常景
中国地质大学数学与物理学院,湖北 武汉
收稿日期:2017年11月24日;录用日期:2017年12月7日;发布日期:2017年12月14日
近年来,支持向量机(SVM)理论广泛应用于模式分类,然而影响其分类准确率的两个主要因素特征选择和参数优化又是相互影响和制约的。文章提出一种BA + SVM算法,利用蝙蝠算法(BA)来同步完成SVM的参数优化和输入数据的特征属性选择,提高了SVM的分类能力。设计的三种实验方式在10个测试数据集上实验结果表明,BA + SVM同步优化算法与单一进行参数优化或单一进行特征选择算法相比,具有输入特征少分类准确率高的优势。
关键词 :SVM,蝙蝠算法,特征选择,参数优化,分类
Copyright © 2017 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
支持向量机(SVM) [
提高分类准确率一般有三种方法。其一,优化SVM核函数的参数。具体途径是网格寻优或者使用交叉验证得到SVM的经验参数,并普遍应用于参数选择研究。其二,是对输入样本进行特征选择。因为选择不当的数据特征可能会导致较差的分类精度 [
蝙蝠算法(BA)是一种具有回波定位特征的元启发式优化算法 [
因此,这就意味着BA比其他算法效率更高。有结果表明基于支持向量机的BA参数优化算法取得了满意结果 [
给定一组具有标签的样本集 ( x i , y i ) , i = 1 , 2 , ... , m ,其中m是训练数据的个数, x i ∈ R n , y i ∈ { − 1 , 1 } ,n表示输入样本维数。对线性可分离数据点,SVM可以通过选择最佳分离超平面来进行训练数据分类。
〈 ω ⋅ x i 〉 + b = 0 , i = 1 , 2 , ⋯ , m (1)
如果存在满足方程式的超平面(1),通过求解以下的优化问题,可以找到最优线性分离超平面:
min 1 ≤ i ≤ m 1 2 ω T ω + C ∑ i = 1 m ξ i subjectto : y i ( 〈 ω ⋅ x i 〉 + b ) − 1 ≥ 0 (2)
其中C是惩罚参数, ξ i 是非负的松弛变量。引入拉格朗日乘数 α i ,原优化问题可以通过其对偶问题来解决。通过求解对偶问题得到 α * i ,最后确定最优超平面的参数 ω * 和 b * 。其决策函数的定义如下:
f ( x ) = s i g n ( ∑ i = 1 m y i α i * 〈 x i ⋅ x 〉 + b * ) (3)
非线性SVM分类器可以表示为:
f ( x , α i * , b * ) = s i g n ( ∑ i = 1 m y i α i * k ( x i , x ) + b * ) (4)
蝙蝠是一种具有回声定位的哺乳动物 [
规则1:蝙蝠都通过回声定位感知距离,并且能通过某种方式分辨猎物和障碍物。
规则2:蝙蝠在位置 x i 以速度 v i 和频率 f min 随机飞行,通过不断变化的响度 A 0 和频率来搜寻猎物。它们自动调整所发射脉冲频率,并依据距离来调整脉冲发射频率 r ∈ [ 0 , 1 ] 。
规则3:虽然响度变化范围可以不同,我们通常假设其从最大值 A 0 减小到最小值 A min 。
基于以上规则,蝙蝠算法的基本步骤为:
步骤1:初始化基本参数。包括响度衰减系数 α ,脉冲发射强化系数 γ ,最大固定频率 f max ,最小频率 f min ,迭代次数 i t e r max 和种群大小 N ;
步骤2:初始化蝙蝠算子 i ( i = 1 , 2 , ⋅ ⋅ ⋅ , n ) 的参数:位置 x i ,速度 v i ,固定频率 f i 和响度 A i ;
步骤3:当 t < i t e r max 时生成新的解决方案,通过公式(8)~(10)更新速度和解决方案;
步骤4:如果 r a n d > r i ,从最佳解决方案中选择一个解,并在选择的最佳解决方案周围生成当局最优解,然后通过自由飞行生成一个新的解决方案;
步骤5:如果 r a n d < A i 且 f ( x i ) < f ( x * ) ,接收新的解决方案,让 r i 增加并且 A i 减少;
步骤6:根据其适应度值对蝙蝠进行排名,并找出当前的最佳位置 x * ;
步骤7:如果达到停止条件(即达到最大许可迭代次数或达到搜索精度),转到步骤8;否则转到步骤3并继续搜索;
步骤8:输出最佳适应值和全局最优解。
假设t时刻蝙蝠i的位置为 x i t ,速度为 v i t ,那么,蝙蝠算法的更新公式为
f i = f min + ( f max − f min ) β (5)
v i t + 1 = v i t + ( x i t − x * ) f i (6)
x i t + 1 = x i t + v i t + 1 (7)
其中 β 表示[0,1]中的随机数, f i 表示当前时刻蝙蝠i的变化频率。这里, x * 是当前的全局最优解。
为了提高解决方案的灵活性,从蝙蝠种群中选择一个蝙蝠,并根据方程(8),通过蝙蝠的自由飞行来创建一个新的当局解决方案。这种随机游走可以解释为本地搜索过程,用于创建新的解决方案。
x n e w = x o l d + ε A t (8)
其中, A t 代表蝙蝠群体在t时刻的平均响度, ε ∈ [ − 1 , 1 ] 是随机向量。 x o l d 表示从当前最优解中选择的随机解。
在BA算法的迭代过程中,使用以下方程来更新响度 A i 和发射脉冲速率 r i :
A i t + 1 = α A i t (9)
r i t + 1 = r i 0 [ 1 − exp ( − γ t ) ] (10)
其中 α 和 γ 是常数,在大部分应用程序中我们通常设置 0 < α < 1 , γ > 0 。因此,很容易得到,当 t → ∞ , A i t → 0 时 r i t → r i 0 。
特征选择的策略可以分为两种不同的模型,分别称为包装模型和滤波模型的模型 [
使用RBF核函数的SVM来实现BA + SVM方法。蝙蝠位置向量由特征掩码(离散值)和参数掩码(连续值 C 和连续值 γ )两部分组成。蝙蝠位置向量的具体设计如表1所示。
其中,n表示数据集的特征数量,输入特征掩码 x i , 1 ~ x i , n 是布尔值,“1”表示选择了该特征,“0”表示未选择该特征。 x i , n + 1 表示参数 C 的值, x i , n + 2 表示参数 γ 的值。
在更新蝙蝠的位置和速度的过程中,速度公式(6)保持不变。对于特征掩码1~n,新的蝙蝠位置的值由以下规则来计算:if rand ( . ) < S ( v i , d ) ,then x i , d = 1 ;else x i , d = 0 ,其中 S ( v ) = 1 1 + e − v 。 S ( v ) 是一个sigmoid函数,rand(.)是从[0,1]中选出的随机数。参数掩码的位置公式(7)不变。
根据实验,更高的分类准确率和更少的特征数会产生更好的适应度值。因此,设计适应度函数如下:
f i t i = ω A ⋅ a c c i + ω F ⋅ ( 1 − ∑ j = 1 n f j n ) (11)
ω A 是SVM的分类准确率权重, ω F 是所选特征数量的权重,用户可根据需要进行适当调整。如果选择了特征j, f j = 1 ,否则 f j = 0 。 a c c i 表示SVM分类准确率,由公式(12)给出。 a c 和 u c 分别表示正确分类的样本数和不正确分类的样本数。
a c c i = c c c c + u c × 100 % (12)
BA + SVM参数优化和特征选择的流程图如图1所示,详细的实验步骤如下:
步骤1:预处理数据:对样本数据做归一化。
步骤2:蝙蝠初始化及SVM参数初始化:即设置蝙蝠算法的参数,包括蝙蝠个数,迭代次数,噪音系数,脉冲强度系数,脉冲频率限制以及适应度函数的权重。以及 C 和 γ 的初始值。
步骤3:建立SVM模型并计算准确率:选择用于训练SVM分类器的输入特征,并于计算基于 C 和 γ 的平均分类准确率。
特征掩码 | 参数掩码 | |||||
---|---|---|---|---|---|---|
形式 | x i , 1 | x i , 2 | ⋯ | x i , n | x i , n + 1 ( C ) | x i , n + 2 ( γ ) |
表1. 蝙蝠i的位置组成表
图1. BA+SVM参数优化和特征选择的流程图
步骤4:更新全局最优解:该模型中每个蝙蝠的适应度值根据公式(11)进行计算。根据适合度值更新全局最优解。
步骤5:判断停止条件:当满足停止条件时,输出最优特征子集和最优参数 C 和 γ ;否则,进行下一步。
步骤6:更新蝙蝠算法:根据蝙蝠算法更新每个蝙蝠的速度和位置并搜索更好的解决方案,然后转到步骤3。
运行BA + SVM方法的平台是具有以下功能的PC端:Intel Pentium®双核CPU,2.5GHz,2.00GB RAM,Windows 7操作系统,运行环境为MathWorks MATLAB 7.9 R2009b(Windows),软件为Libsvm [
为了评估BA + SVM方法的分类能力,使用UCI机器学习库中的10个数据集进行测试,如表2所示。
停止标准是迭代次数达到500,或适应度值在前100次迭代中没有改善。
多分类问题的准确率一般通过总体命中率进行评估,两分类问题的准确性评估一般需要三个指标进行详细说明,表3给出两分类问题的分类情况。
标号 | 数据集 | 分类数 | 实例数 | 特征数 |
---|---|---|---|---|
1 | Breast cancer | 2 | 699 | 10 |
2 | Car evaluation | 4 | 1728 | 6 |
3 | Glass | 6 | 214 | 9 |
4 | Ionosphere | 2 | 351 | 34 |
5 | Iris | 3 | 150 | 4 |
6 | Pima-Indian | 2 | 768 | 8 |
7 | Seeds | 3 | 210 | 7 |
8 | Sonar | 2 | 208 | 60 |
表2. UCI机器学习库的数据集
预测 | |||
---|---|---|---|
正样本 | 负样本 | ||
实际 | 正样本 | TruePositive | FalseNegative |
负样本 | FalsePositive | TrueNegative |
表3. 两分类问题的分类情况
TP和FN分别表示正样本的正确分类率和正样本的不正确分类率,是两个重要的性能指标,计算公式表示如下:
TP = # TruePositive # FalseNegative + # TruePositive (13)
TN = # TureNegative # TrueNegative + # FalsePositive (14)
Averageaccuracy = # TruePositive + # TruePositive # TestingSample (15)
设计了三种实验方式,如表4所示。实验中,BA群体大小为20,响度衰减系数为 α = 0.5 ,脉冲发射系数为 γ = 0.5 ,脉冲频率限制为 f i ∈ [ 0 , 2 ] 。SVM中参数 的搜索范围为0.01~10000,参数 γ 的搜索范围为0.01~1000。适应度函数中, ω A = 0.8 和 ω F = 0.2 。
表5结果显示,BA + SVM和PSO + SVM在不同数据集上产生比SVM更高的分类准确率,说明这两种组合算法确实可以获得更好的SVM参数和特征子集。此外,在没有特征选择的情况下,BA + SVM在6个数据集中产生较高的分类准确率。进行特征选择的情况下,BA + SVM在7个数据集中产生较高的分类准确率。一般来说,同步进行参数优化和特征选择的BA + SVM比PSO + SVM具有更好的性能。
网格算法是一种常规的参数优化方法。表6列出的是蝙蝠算法的参数寻优和网格算法的参数寻优比较结果。对于二分类数据集,BA寻优的平均正命中率和平均负命中率均高于网格寻优算法。
图2(a)到图2(d)显示了4个数据集中三种优化方法的测试结果。显然,在选择的四个数据集上,同
实验方式 | 特征掩码 | 参数掩码 |
---|---|---|
1 | 开 | 关 |
2 | 关 | 开 |
3 | 开 | 开 |
表4. 实验方式设计
数据集 | SVM | 特征选择(%) | 无特征选择(%) | ||
---|---|---|---|---|---|
PSO + SVM | BA + SVM | PSO + SVM | BA + SVM | ||
Breast cancer | 88.97 | 91.11 | 94.38 | 92.27 | 95.96 |
Car evaluation | 88.64 | 91.74 | 94.87 | 92.14 | 94.78 |
Glass | 68.33 | 70.41 | 72.03 | 73.18 | 74.15 |
Ionosphere | 92.14 | 94.78 | 92.76 | 95.22 | 94.22 |
Iris | 79.28 | 90.36 | 90.09 | 90.33 | 94.69 |
Pima-Indian | 77.87 | 80.78 | 80.04 | 85.5 | 82.11 |
Seeds | 84.15 | 88.5 | 87.31 | 87.22 | 86.87 |
Sonar | 85.14 | 93.41 | 92.1 | 96.26 | 95.24 |
Teaching | 73.41 | 76.25 | 78.45 | 82.06 | 84.63 |
Wine | 93.45 | 96.09 | 97.27 | 97.6 | 98.64 |
表5. BA + SVM与SVM和PSO + SVM的分类效果比较
数据集 | BA寻优(%) | 网格寻优(%) | ||||
---|---|---|---|---|---|---|
TP | TN | 准确率 | TP | TN | 准确率 | |
Breast cancer | 98.78 | 89.96 | 94.38 | 88.57 | 85.24 | 87.45 |
Ionosphere | 94.63 | 90.24 | 92.76 | 92.84 | 90.21 | 90.50 |
Pima-Indian | 82.48 | 79.19 | 80.04 | 79.15 | 74.02 | 75.24 |
Sonar | 96.42 | 91.74 | 92.10 | 79.98 | 97.41 | 90.98 |
表6. 无特征选择情形下BA寻优和网格寻优对比
步进行参数优化和特征选择的BA + SVM具有最高的分类准确率,这表明同步优化的BA + SVM具有最优性能。
输入样本的特征选择和SVM核函数的参数设置是彼此相互影响的,提出的参数寻优和特征选择的同步算法就是为了解决这一博弈问题。仿真实验表明,无论是否进行特征选择,BA + SVM都具有比PSO + SVM
图2. 4个数据集上三种实验结果比较
更高的分类准确率。就单纯参数优化而言,BA + SVM有比网格寻优具有更好的SVM分类准确率。此外,4个数据集上的仿真实验表明,同步进行参数优化和特征选择的BA + SVM比单独进行参数优化或特征选择的BA + SVM具有更好的分类效果。
国家自然科学基金项目(11301492);中国地质大学(武汉)基础研究基金项目(CUGL140420)。
何 凡,卢常景. 一种提高SVM分类能力的同步优化算法A Synchronous Optimization Algorithm for Increasing Accuracy of SVM Classification[J]. 应用数学进展, 2017, 06(09): 1073-1081. http://dx.doi.org/10.12677/AAM.2017.69130