基于变长PSO的高维特征选择算法(VLPSO)

本文提出了一种变长粒子群优化(VLPSO)方法用于高维特征选择,解决了传统PSO方法在处理高维数据时的内存消耗和计算效率问题。VLPSO引入了可变长度的表示方法,使粒子能够根据特征相关性动态调整长度,从而缩小搜索空间并提高性能。通过与标准PSO和非PSO方法的比较,VLPSO在多个高难度数据集上表现出更优的分类性能和更快的收敛速度。此外,VLPSO借鉴了CLPSO的学习率机制,通过计算学习率Pc来决定粒子的Exemplar,以跳出局部最优。实验结果显示,VLPSO能有效减少特征子集的大小,增强分类效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进化计算方向记录一下看的第一篇论文,复制了博主Reacubeth的思路

摘要:粒子群优化(PSO)在特征选择(FS)方面显示出了广阔的前景。然而,目前大多数基于PSO的FS方法都使用固定长度的表示,这是不灵活的,并限制了PSO对FS的性能。当将这些方法应用于高维数据时,它不仅消耗了大量的内存,而且还需要很高的计算成本。随着数据收集技术的进步,要克服这一限制,需要PSO能够处理更高维度的数据。在本文中,我们提出了第一个针对FS的变长PSO表示方法,使粒子具有不同的长度或更短的长度,这定义了更小的搜索空间,从而提高了PSO的性能。通过将特征的相关性降序重新排列,我们让粒子长度变得更短,以获得更好的分类性能。此外,利用所提出的长度变化机制,PSO可以跳出局部最优,进一步缩小搜索空间,并将搜索重点集中在更小、更有成效的区域。这些策略使PSO能够在更短的时间内达到更好的解决方案。在10个不同困难的高维数据集上的结果表明,所提出的可变长度的PSO可以比固定长度的PSO方法在更短的时间内实现更小的特征子集,具有显著更高的分类性能。在大多数情况下,该方法也优于比较的非PSO的FS方法。

问题提出
①高维特征选择,占内存
②高维特征选择,耗时

VLPSO(变长PSO)主要贡献
①变长单目标PSO表示方法的提出
②改编的粒子维度值交互学习方式,借鉴的CLPSO

PSO速度、位置公式:

其中,\omega是表示粒子运动动量的惯性权重,p_{id}^{t}p_{gd}^{t}是d维数上的pbest(粒子自己探索过的最佳位置)和gbest(所有粒子探索过的全局最佳位置)位置,c1和c2是加速度常数,r1和r2是[0,1]中均匀分布的随机值。
 

粒子表示:

Exemplar:当前个体的每个维度需要学习的粒子的index

例如Exemplar那一行的6表示当前粒子的第4个维度更新时需要学习第6个个体的第4个维度。

Learning Probability:学习率,达到阈值则学习Exemplar值,否则学习自身的pbest

 补充:在标准PSO中,粒子速度的所有维度都是根据其pbest和gbest进行更新的,而CLPSO允许不同的维度从不同粒子的pbest中学习,包括它自己的粒子。选择它自己或另一个粒子作为一个exemplar的决定取决于一个被称为Pc的学习率,其范围从0.05到0.5,每个粒子都有自己的Pc。

Renew Exemplar Count: 对Exemplar的重置代数

注意这里借鉴的是CLPSO方法:唯一的不同是Pc的计算方法

Exemplar的生成
对每个个体的每个维度的Exemplar采取如下操作

计算学习率Pc
如果Pc的值小于随机数,则当前维度的Exemplar为自身粒子的index
否则
随机选择两个粒子,fitness值较大粒子的index作为当前维度的Exemplar
学习率Pc的计算方式

0.05与0.45是CLPSO中提出的经验值

Rank(i)是粒子的排序,它通过信息论的对称不确定性计算

学习率越小,学习自身粒子的可能性就越大

Exemplar生成算法:

种群划分

(6)式中popsize为种群大小,nbrdiv为划分数

PopSize=100,NbrDiv是一个预设的值,令其等于5,则种群被分为5组,每组20个个体。

(7)式中parlenv为划分v中的粒子长度,maxlen为问题的维数

假设有5000维,NbrDiv=5,则种群每一层的长度如下所示:

注意:从粒子后端除去维度,比如1000维的除去后面4000个维度

进化中种群维度的改变
触发机制:几代过后gBest没有提升

过程:计算每个层次(不同长度)的粒子适应度的均值,寻找最好的Best Division,保持该层次的长度不变,作为最大长度重新划分其它层次的个体

注意:长度变小的层次的粒子是去除的末尾的维度,长度变长的粒子增加相应的维度,这些维度的值随机生成。

粒子长度变化算法:

 适应度函数:

将KNN的精度和使用权重(γ)的距离测量相结合

 

 

最大化不同类实例(Db)之间的距离,并最小化同一类实例之间的距离(Dw)

M为训练集中的实例数

注意:使用实例被选择的特征子集来计算曼哈顿距离,其中距离的度量可以判断特征子集划分不同类别实例与聚合相同类别实例的能力。 

流程图:

①初始化不同长度的种群,初始化Exemplar
②对每个粒子判断是否需要重置Exemplar
③速度与位置更新,如果pbest在α代后没有更新,则更新学习率Pc下一代需要重置Exemplar
④更新gbest
⑤如果gbset在β代后没有提升,则种群长度重置
⑥停止准则,否进入第三步

————————————————
版权声明:本文为优快云博主「Reacubeth」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/xyisv/article/details/82747271

### 高维粒子群优化的Matlab实现 对于高维特征选择问题,一种改进型粒子群优化算法——变长度粒子群优化(Variable-Length Particle Swarm Optimisation, VLPSO),已被证明有效。该方法通过调整粒子表示来适应不同数量的变量,在处理高维分类任务上表现出色[^3]。 下面展示一段用于执行高维空间内粒子群优化的标准框架代码: ```matlab function [bestPosition, bestFitness] = highDimensionalPSO(objectiveFunction, numDimensions, options) % 初始化种群参数 populationSize = options.populationSize; maxIterations = options.maxIterations; % 定义速度和位置边界 minPos = repmat(options.minBound, 1, numDimensions); maxPos = repmat(options.maxBound, 1, numDimensions); % 创建初始种群及其个人最佳记录 positions = rand(populationSize, numDimensions) .* (maxPos - minPos) + minPos; velocities = zeros(size(positions)); personalBest = positions; pBestScores = arrayfun(@(i) objectiveFunction(personalBest(i,:)), 1:populationSize); % 记录全局最优解 [~, idxOfGlobalOptimum] = min(pBestScores); globalBest = personalBest(idxOfGlobalOptimum,:); gBestScore = pBestScores(idxOfGlobalOptimum); for iter = 1:maxIterations % 更新每个粒子的速度与位置 for i = 1:populationSize r1 = rand(); r2 = rand(); cognitiveComponent = r1 * options.cognitiveWeight * ... (personalBest(i,:) - positions(i,:)); socialComponent = r2 * options.socialWeight * ... (globalBest - positions(i,:)); inertiaFactor = options.inertiaStart - ... ((options.inertiaStart-options.inertiaEnd)/maxIterations)*iter; velocities(i,:) = inertiaFactor*velocities(i,:) + ... cognitiveComponent + socialComponent; positions(i,:) = positions(i,:) + velocities(i,:); % 边界条件处理 positions(i,positions(i,:)<minPos) = minPos(positions(i,:)<minPos); positions(i,positions(i,:)>maxPos) = maxPos(positions(i,:)>maxPos); % 更新个体历史最优 currentScore = objectiveFunction(positions(i,:)); if currentScore < pBestScores(i) personalBest(i,:) = positions(i,:); pBestScores(i) = currentScore; % 同步更新全局最优 if currentScore < gBestScore globalBest = positions(i,:); gBestScore = currentScore; end end end end bestPosition = globalBest; bestFitness = gBestScore; end ``` 此函数接受目标函数、输入向量维度数以及配置选项作为参数,并返回找到的最佳解决方案及其对应的适应度值。注意这里采用的是最小化问题设定;如果面对最大化问题,则需相应调整比较逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值