【matlab 投影寻踪】基于PSO算法的最优投影方向优化

news2024/12/25 22:18:18

一 投影寻踪算法

投影寻踪是处理和分析高维数据的一类统计方法,其基本思想是将高维数据投影到低维(1~3维)子空间上,寻找出反映原高维数据的结构或特征的投影,以达到研究和分析高维数据的目的。1974年,美国Stanford大学的Friedman和Tukey首次将该方法命名为Projection Pursuit,即投影寻踪。
投影寻踪(projection pursuit,简称PP)是国际统计界于70年代中期发展起来的一种新的、有价值的新技术,是统计学、应用数学和计算机技术的交叉学科。它是用来分析和处理高维观测数据,尤其是非正态非线性高维数据的一种新兴统计方法。它通过把高维数据投影到低维子空间上,寻找出能反映原高维数据的结构或特征的投影,达到研究分析高维数据的目的。它具有稳健性、抗干扰性和准确度高等优点,因而在许多领域得到广泛应用。

三 粒子群算法

粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,用于解决优化问题。它模拟群体中的个体(粒子)在解空间中的搜索过程,通过个体之间的信息交流和合作来寻找最优解。

粒子群算法的基本思想是,将解空间看作是一个多维空间,个体(粒子)在解空间中移动,并通过个体之间的信息交流和自我学习来改进自己的搜索策略。每个个体都有自己的位置和速度,并根据自己的经验(个体最优解)和群体的经验(全局最优解)来调整自己的移动方向和速度。

在粒子群算法中,每个粒子都有一个位置向量和一个速度向量。粒子根据自己的速度向量更新自己的位置,并根据自己的位置计算自己的适应度值。每个粒子都保留了自己的最优位置和适应度值,同时也保存了群体中的全局最优位置和适应度值。粒子根据自己的最优位置和全局最优位置来更新自己的速度,从而改变自己的移动方向和速度。

具体来说,粒子的速度更新公式为:
v_i(t+1) = w * v_i(t) + c1 * r1 * (pbest_i - x_i(t)) + c2 * r2 * (gbest - x_i(t))

其中,v_i(t)为粒子i在时刻t的速度,w为惯性权重,c1和c2为加速因子,r1和r2为随机数。pbest_i为粒子i的最优位置,x_i(t)为粒子i在时刻t的位置,gbest为全局最优位置。

粒子的位置更新公式为:
x_i(t+1) = x_i(t) + v_i(t+1)

粒子群算法的搜索过程一般包括以下步骤:

  1. 初始化粒子的位置和速度。
  2. 计算每个粒子的适应度值,并更新每个粒子的最优位置和全局最优位置。
  3. 根据粒子的最优位置和全局最优位置,更新每个粒子的速度和位置。
  4. 重复步骤2和步骤3,直到达到停止条件。

粒子群算法的优点是简单易实现,并且能够在较短的时间内找到较优解。然而,它也存在一些缺点,比如容易陷入局部最优解、对参数敏感等。因此,在应用粒子群算法时需要根据实际情况进行参数的调整和优化。

三 代码分享

clc
close all
clear all
dbstop if error
%%
filename='一二三四五线城市量化分析数据.xlsx';
% sheetname='2000-2013';
sheetname='2014-2016';

[data,txt]=xlsread(filename,sheetname);
%% 读取数据
% xij=data(:,9:end-2);
xij=data(:,9:end);

namelist=txt(3:end,2);
x_ij_norm=(xij-min(min(xij)))./(max(max(xij))-min(min(xij)));
%% 求解最优投影系数a_best
[n,m]=size(x_ij_norm);
objfunction=@(a)objFunction(a,x_ij_norm);
%%求解
lb=zeros(m,1);
ub=ones(m,1);
pop=50;
Max_iter=100;
[a_best,Best_score,curve]=PSO(pop,Max_iter,lb,ub,m,objfunction);


figure

plot(abs(curve))
xlabel('迭代次数')
ylabel('目标函数指')
title('粒子群算法进化曲线')


%% 计算落户门槛指数
Z=x_ij_norm*a_best';

%% 显示结果

figure
subplot(2,2,1)
bar(Z(1:30))
xticks(1:30)
xticklabels(namelist(1:30))
ylabel('落户门槛指数')
subplot(2,2,2)
bar(Z(1+30:60))
xticks(1:30)
xticklabels(namelist(1+30:60))
ylabel('落户门槛指数')
subplot(2,2,3)
bar(Z(1+60:90))
xticks(1:30)
xticklabels(namelist(1+60:90))
ylabel('落户门槛指数')
subplot(2,2,4)
bar(Z(1+90:120))
xticks(1:30)
xticklabels(namelist(1+90:120))
ylabel('落户门槛指数')
sgtitle(sheetname)




%% 粒子群算法
function [Best_pos,Best_score,curve]=PSO(pop,Max_iter,lb,ub,dim,fobj)
%% 参数设置
w = 0.9;      % 惯性因子
c1 = 2;       % 加速常数
c2 = 2;       % 加速常数
%速度范围设定
Vmax = 2;
Vmin = -2;
Dim = dim ;            % 维数
sizepop = pop;       % 粒子群规模
maxiter  = Max_iter;      % 最大迭代次数
%%
if(max(size(ub)) == 1)
    ub = ub.*ones(1,dim);
    lb = lb.*ones(1,dim);
end
fun=fobj;
%% 粒子群初始化
% Range = ones(sizepop,1)*(ub-lb);
% pop = rand(sizepop,Dim).*Range + ones(sizepop,1)*lb;    % 初始化粒子群
pop=init(sizepop,lb,ub);
V = rand(sizepop,Dim)*(Vmax-Vmin) + Vmin;                 % 初始化速度
fitness = zeros(sizepop,1);
for i=1:sizepop
    fitness(i,:) = fun(pop(i,:));                         % 粒子群的适应值
end

%% 个体极值和群体极值
[bestf, bestindex]=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
gbest=pop;                % 个体最佳
fitnessgbest=fitness;              % 个体最佳适应值
fitnesszbest=bestf;               % 全局最佳适应值

%% 迭代寻优
iter = 0;
while( (iter < maxiter ))
    for j=1:sizepop
        % 速度更新
        V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        if V(j,:)>Vmax
            V(j,:)=Vmax;
        end
        if V(j,:)<Vmin
            V(j,:)=Vmin;
        end
        % 位置更新
        pop(j,:)=pop(j,:)+V(j,:);
        for k=1:Dim
            if pop(j,k)>ub(k)
                pop(j,k)=ub(k);
            end
            if pop(j,k)<lb(k)
                pop(j,k)=lb(k);
            end
        end
        pop(j,:)=pop(j,:)./sum(pop(j,:));
        % 适应值
        fitness(j,:) =fun(pop(j,:));
        % 个体最优更新
        if fitness(j) < fitnessgbest(j)
            gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
        end
        % 群体最优更新
        if fitness(j) < fitnesszbest
            zbest = pop(j,:);
            fitnesszbest = fitness(j);
        end
    end
    iter = iter+1;                      % 迭代次数更新
        fprintf('当前迭代次数%i\n',iter)

    curve(iter) = fitnesszbest;
end
%% 绘图
Best_pos = zbest;
Best_score = fitnesszbest;

四 结果演示

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下开放指定端口

比如需要开放82端口&#xff1a; #查询是否开通 firewall-cmd --query-port82/tcp#开放端口82 firewall-cmd --zonepublic --add-port82/tcp --permanent#重新加载防火墙 firewall-cmd --reload

云原生系列 - Jenkins

Jenkins Jenkins&#xff0c;原名 Hudson&#xff0c;2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站&#xff08;英文&#xff09;&#xff1a;https://www.jenkins.io/ 官方网站&#xff08;中文&#xff09;&#xff1a;https://www.jenkins.io…

2024“钉耙编程”中国大学生算法设计超级联赛(1)

Rank 待补1003树&#xff0c;1005博弈&#xff0c;1012并。 星星 - HDU 7434 - Virtual Judge 这题第一眼云的时候感觉是贪心&#xff0c;后来要上手写代码感觉无从下手&#xff0c;遂反映过来是动态规划。 然后就是一个很简单的dp&#xff0c;外层枚举物品&#xff0c;里面枚举…

多类别支持向量机(Multi-class SVM)

多类别支持向量机&#xff08;Multi-class SVM&#xff09;是一种扩展二分类支持向量机以处理多类别分类问题的方法。常见的方法有“一对一”&#xff08;one-vs-one&#xff09;和“一对多”&#xff08;one-vs-rest&#xff09;。 一、数学模型理论推导 1.1 一对多&#xf…

时间卷积网络(TCN):序列建模的强大工具(附Pytorch网络模型代码)

1. 引言 引用自&#xff1a;Bai S, Kolter J Z, Koltun V. An empirical evaluation of generic convolutional and recurrent networks for sequence modeling. arXiv[J]. arXiv preprint arXiv:1803.01271, 2018, 10. 时间卷积网络&#xff08;Temporal Convolutional Networ…

Six common classification algorithms in machine learning

分类算法是一种机器学习算法&#xff0c;其主要目的是从数据中发现规律并将数据分成不同的类别。分类算法通过对已知类别训练集的计算和分析&#xff0c;从中发现类别规则并预测新数据的类别。常见的分类算法包括决策树、朴素贝叶斯、逻辑回归、K-最近邻、支持向量机等。分类算…

减分兔搜题-12123学法减分20题目及答案 #媒体#职场发展

对于即将参加驾驶考试的朋友来说&#xff0c;掌握一些经典题目和答案至关重要。今天&#xff0c;我就为大家带来了这样一份干货——20道驾驶考试题目和答案&#xff0c;助你轻松应对考试&#xff01;这些题目不仅包括了考试中常考的内容&#xff0c;还有针对难点和重点的详细解…

​数据结构之初始二叉树(3)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 二叉树的基本操作 通过上篇文章的学习&#xff0c;我们简单的了解了二叉树的相关操作。接下来就是有…

前端组件化技术实践:Vue自定义顶部导航栏组件的探索

摘要 随着前端技术的飞速发展&#xff0c;组件化开发已成为提高开发效率、降低维护成本的关键手段。本文将以Vue自定义顶部导航栏组件为例&#xff0c;深入探讨前端组件化开发的实践过程、优势以及面临的挑战&#xff0c;旨在为广大前端开发者提供有价值的参考和启示。 一、引…

从微软发iPhone,聊聊企业设备管理

今天讲个上周的旧闻&#xff0c;微软给员工免费发iPhone。其实上周就有很多朋友私信问我&#xff0c;在知乎上邀请我回答相关话题&#xff0c;今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身&#xff0c;而是更想聊聊事件的主要原因——微软企业设备管理&#xff0…

深入浅出WebRTC—DelayBasedBwe

WebRTC 中的带宽估计是其拥塞控制机制的核心组成部分&#xff0c;基于延迟的带宽估计是其中的一种策略&#xff0c;它主要基于延迟变化推断出可用的网络带宽。 1. 总体架构 1.1. 静态结构 1&#xff09;DelayBasedBwe 受 GoogCcNetworkController 控制&#xff0c;接收其输入…

C++STL初阶(7):list的运用与初步了解

在了解了vector之后&#xff0c;我们只需要简单学习List与vector不一样的接口即可 1.list的基本接口 1.1 iterator list中&#xff0c;与vector最大的区别就是迭代器由随机迭代器变成双向迭代器 string和vector中的迭代器都是随机迭代器&#xff0c;支持-等&#xff0c;而LIS…

MOGONET:患者分类与biomarker识别

为了充分利用组学技术的进步并更全面地了解人类疾病&#xff0c;需要新的计算方法来综合分析多种类型的组学数据。多组学图卷积网络 (MOGONET&#xff0c;Multi-Omics Graph cOnvolutional NETworks)是一种用于生物医学分类的新型多组学整合方法。MOGONET 包含特定组学的学习和…

Keil开发IDE

Keil开发IDE 简述Keil C51Keil ARMMDK DFP安装 简述 Keil公司是一家业界领先的微控制器&#xff08;MCU&#xff09;软件开发工具的独立供应商。Keil公司由两家私人公司联合运营&#xff0c;分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公…

三、初识C语言(3)

1.操作符 &#xff08;1&#xff09;算术操作符 - * / % 商 余&#xff08;取模&#xff09; 小算法&#xff1a; 若a<b&#xff0c;则a%b a 若a%b c&#xff0c;则0 < c < b-1 若两个int 类型数相除&#xff0c;结果有小数会被舍弃。 保留小数…

苹果电脑pdf合并软件 苹果电脑合并pdf 苹果电脑pdf怎么合并

在数字化办公日益普及的今天&#xff0c;pdf文件因其跨平台兼容性强、格式稳定等特点&#xff0c;已经成为工作、学习和生活中不可或缺的文件格式。然而&#xff0c;我们常常面临一个问题&#xff1a;如何将多个pdf文件合并为一个&#xff1f;这不仅有助于文件的整理和管理&…

苏州金龙海格汽车入选2024中国汽车行业可持续发展实践案例

2024年7月11日-13日&#xff0c;由中国汽车工业协会主办的第14届中国汽车论坛在上海嘉定举办。本届论坛隆重发布了“2024中国汽车行业可持续发展实践案例”&#xff0c;苏州金龙因在坚持绿色可持续发展方面做出的努力和贡献获评2024中国汽车行业可持续发展实践案例“绿色发展”…

Ideal窗口中左右侧栏消失了

不知道大家在工作过程中有没有遇到过此类问题&#xff0c;不论是Maven项目还是Gradle项目&#xff0c;突然发现Ideal窗口右侧图标丢失了&#xff0c;同事今天突然说大象图标不见了&#xff0c;不知道怎样刷新gradle。 不要慌张&#xff0c;下面提供一些解决思路&#xff1a; 1…

HarmonyOS ArkUi 唤起系统APP:指定设置界面、浏览器、相机、拨号界面、选择通讯录联系人

效果&#xff1a; 完整工具类&#xff1a; import { common, Want } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit; import { call } from kit.TelephonyKit; import { promptAction } from kit.ArkUI; import { contact } from kit.Contacts…

PHP宠物店萌宠小程序系统源码

&#x1f43e;萌宠生活新方式&#x1f43e; &#x1f3e1;【一键直达萌宠世界】 你是否也梦想着拥有一家随时能“云撸猫”、“云吸狗”的神奇小店&#xff1f;现在&#xff0c;“宠物店萌宠小程序”就是你的秘密花园&#xff01;&#x1f31f;只需轻轻一点&#xff0c;就能瞬…