基于遗传算法的特征选择是一种wrapper方法,该算法是以支持向量机分类器的识别率作为特征选择的可分性判断依据。在遗传算法中,对所选择的特征用[0,1]二进制串来初始化,由于二进制数{0,1}是等概率出现的,所以最优特征个数的期望是原始特征个数的一半。要进一步减少特征个数,则可以让二进制数{0,1}以不等概率出现,以a个特征中选择b个特征为例,使得在a位二进制串中1出现的概率为
b
/
a
b/a
b/a。
对于支持向量机和遗传算法,可以看先前的博客《线性支持向量机》和《遗传算法及其实现》。
改进的遗传算法
一个完整的遗传算法主要包括几个步骤:基因编码,种群初始化,选择操作,交叉操作,变异操作,结束条件判断等。
基因编码
将选择的特征组合用一个{0,1}二进制串表示,0表示不选择对应的特征,1表示选择对应的特征。对惩罚参数C和核参数 σ \sigma σ也采用二进制编码,根据范围和精度计算所需要的二进制串长度分别为 l c , l σ l_c,l_{\sigma} lc,lσ。
种群初始化
以a个特征中选取b个特征为例,确保在前a位二进制串中1出现的概率一定是 b / a b/a b/a,两个参数部分的二进制码随机生成,二进制长度为 l a + l c + l σ l_a+l_c+l_{\sigma} la+lc+lσ;然后以一定的种群规模进行种群初始化。
选择操作
计算个体适应度,即先对个体进行解码,再用训练和测试样本计算SVM的正确分类率:
f
i
t
n
e
s
s
=
W
A
×
S
V
M
a
c
u
r
a
c
y
+
W
F
×
(
Σ
i
=
1
l
a
C
i
×
F
i
)
−
1
W
A
:
S
V
M
分类准确率权重,一般设置为
75
−
100
%
S
V
M
a
c
c
u
r
a
c
y
:
S
V
M
分类准确率
W
F
:选择特征和惩罚参数乘积和逆的权重,如果准确率非常重要,可以把它设置成
100
%
C
i
:特征
i
的损失,如果没有关于损失的信息,可以设置为
1
F
i
:
1
代表选择了特征
i
;
0
表示没有选择特征
i
。
fitness = W_A\times SVM_{acuracy}+W_F\times (\Sigma_{i=1}^{l_a}C_i\times F_i)^{-1}\\ W_A:SVM分类准确率权重,一般设置为75-100\%\\ SVM_{accuracy}:SVM分类准确率\\ W_F:选择特征和惩罚参数乘积和逆的权重,如果准确率非常重要,可以把它设置成100\%\\ C_i:特征i的损失,如果没有关于损失的信息,可以设置为1\\ F_i:1代表选择了特征i;0表示没有选择特征i。
fitness=WA×SVMacuracy+WF×(Σi=1laCi×Fi)−1WA:SVM分类准确率权重,一般设置为75−100%SVMaccuracy:SVM分类准确率WF:选择特征和惩罚参数乘积和逆的权重,如果准确率非常重要,可以把它设置成100%Ci:特征i的损失,如果没有关于损失的信息,可以设置为1Fi:1代表选择了特征i;0表示没有选择特征i。
然后采用轮盘赌选择法,随机从种群中挑选一定的数目个体,再将适应度最好的个体作为父体,这个过程重复进行直到完成所有个体的选择。
交叉操作
由于交叉操作的随机性,会改变前a位二进制串中的1出现的概率,使其不等于
b
/
a
b/a
b/a,这将导致不同个体特征矢量的维数不尽相同,所以进行以下操作。
首先将二进制编码分成两部分,前
l
a
l_a
la位特征编码部分和后
l
c
+
l
σ
l_c+l_{\sigma}
lc+lσ位参数编码部分。如下图所示,
首先对比两个父体,找出两父体个体同为1的基因位,称之为“优势基因位”,例如第1,4位。然后找两父体其中一个为1的基因位,称之为“非优势基因位”,例如2,5,6,a。如果两父体中存在“优势基因位”,表明两父体对该基因位所对应的特征分量的选择意见趋于一致,该特征应在子代中予以保留。如果父代个体中存在“非优势基因位”,表明两个体在该特征上存在分歧。
如果两父体个体存在e个“优势基因位”,则在子代中保留这些基因位,在“非优势基因位”中随机选择b-e个基因位,并令这些基因位为1,产生两个新个体。图1中两个子个体保留了第1,4位,子个体1在第2,5,6,a中随机选择了第6,a位并令其成为1,子个体2第2,5,6,a位中随机选择了第2,5位并令其为1.这样保证了子个体与父体选择的特征数式中为b。
变异操作
如果对特征编码进行翻转变异操作,那么将使二进制串中的为1的基因位发生变化,如果某一位由0变成1,则选择的特征数变为d+1,反之变为d-1.为解决这个问题可以使用下面的方法。
如图2,分别统计编码为1和0的基因位,分别在为1和0的基因位中随机选择一个二进制数,图2是第2和第5位相互交换,得到变异子个体。
结束条件
前面的选择,交叉,变异操作合起来称为遗传操作,当遗传操作到达设定的最大迭代次数时,算法结束。如果迭代遗传过程中,连续若干代最优个体不再变化,算法也可提前结束。
下面是算法的流程图:
代码实现:FeatureSelectionsAndExtractions
参考
【Cheng-Lung Huang , Chieh-Jen Wang】A GA-based feature selection and parameters optimization for support vector machines
【杜卓明,冯静】改进遗传算法和支持向量机的特征选择算法