栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、基于划分的K-means聚类算法简介

1 K均值聚类
K-means代表一种非常有用的分割式集群技术, 通过竞争学习, 它在许多领域得到了广泛的应用.不幸的是, 作为一种爬山法, K-means在很大程度上取决于初始聚类中心和输入模式的选择, 否则无法收敛或收敛到局部最优, 从而导致不确定的聚类结果.为了解决上述问题, 本文研究了一种改进的粒子群优化 (IPSO) , 提出了基于IPSO的K-means算法 (IPSO-KM) .

2 粒子群优化
在PSO算法中, 每个粒子在搜索空间中作为一个点, 通过自己的努力和周围其他粒子的社会合作进行搜索.所有粒子都有适应值和速度.粒子通过学习所有粒子的最好经验穿越D维问题空间.因此, 通过搜索过程粒子倾向于飞向更好的搜索区域.第i个粒子的速度Vi和位置更新Xi如下:

其中:c1和c2是加速度常量, 代表到达Pbesti和Gbest位置的每个粒子的加权随机加速度.r1和r2是两个在区间[0, 1]之间的随机函数.Xi= (xi1, xi2, …, xi D) 是第i个粒子的位置;Pbesti= (pbesti1, pbesti2, …, pbesti D) 是第i个粒子的最好先前位置产生的最适应值;Gbest= (gbest1, gbest2, …, gbestD) 是整个种群发现的最好位置;Vi= (vi1, vi2, …, vi D) 代表粒子i的位置变化 (速度) 比率.w是用于平衡全局和局部搜索能力的惯性权值.Shi和Eberhart[7]的研究表明, 一个相对较大的w值有利于总体最优, 一个较小的w值有利于收敛.与此同时, 提出了一个迭代线性递减算法, 刚开始具有良好的全局搜索能力, 随后具有良好的局部搜索能力.给出下面的方程:

其中:w1和w2分别是初始值和最终值.Max_iter和iter分别是最大值和当前迭代值.如果|vi D|超过用户指定的正常数值vdmax, 该维度的速度分配给标志 (vid) vdmax.即每一维的粒子速度不能超过最大值vdmax.

三、部分源代码
%% 清屏、清空变量
clc;
clear all;
close all; 
%% 算法参数设置
k=10;    % 聚类数目
iter=20; % 迭代次数
%% 生成随机变量点 
n=1000;          % 样本点数目
rx=10*rand(n,1); % vector of random data x
ry=10*rand(n,1); % vector of random data y

% %% 使用改进后的PSO进行优化Kmeans聚类算法的初始聚类中心
p = pso(rx,ry,k);  %改进的PSO优化Kmeans聚类算法
centroidsx=p(1:k); % initial cluster centers x
centroidsy=p(k+1:end); % initial cluster centers y
%% 随机初始化聚类中心
% centroidsx=rx( ceil(rand(k,1)*size(rx,1)) ,:); % initial cluster centers x
% centroidsy=ry( ceil(rand(k,1)*size(ry,1)) ,:); % initial cluster centers y
% % plot(centroidsx,centroidsy)
%% normal data clustering(NDC)
for p=1:iter          %迭代次数
    for i=1:n         %样本数目
        for j=1:k     %聚类数目
            if p==1   %迭代次数为1时
                diste(i,j)=sqrt(((rx(i))-(centroidsx(j)))^2+((ry(i))-(centroidsy(j)))^2);  
                %计算个数据点到聚类中心的距离
            % the sample of the jth centroid
            else
                diste(i,j)=sqrt(((rx(i))-(Cclustx(j)))^2+((ry(i))-(Cclusty(j)))^2);
            end
        end
        % Define clusters
        [minidist, CN] = min(diste(i,1:k)); % 求取距离最小的,并记录对应类别数
        % cluster which the sample belongs to
        Distance(p,i)=minidist;  %记录每一代的每一个样本与各个聚心最小的距离
        Cln(p,i)=CN;             %记录每一代的每一个样本的类别数
    end
    % Recompute the clusters center
    for q=1:k
        PC=(Cln(p,:)==q); % Position of the points of the cluster
        Cpoints(q,:)=PC; % Points of the cluster
        Cclustx(q,:)=mean(rx(PC)); % New cluster centers in x
        Cclusty(q,:)=mean(ry(PC)); % New cluster centers in y
    end
    SCCx(p,:)=Cclustx; % center of the cluster at each iteration in x
    SCCy(p,:)=Cclusty; % center of the cluster at each iteration in y
    CPP(p,:,:)=Cpoints; % points of the cluster at each iteration
end
%% Plot of the movements of the centroids and clusters
CV= 'o*+s^v.db+c+m+k+yorobocomokoysrsbscsmsksy'; % Color Vector
for p=1:iter+1
    figure (1)
    if p==1
        plot(rx,ry,'o','LineWidth',1.5); hold on; plot(centroidsx,centroidsy,'*k','LineWidth',6.5);
        hold off
    else
        for i=1:k
        plot(rx(CPP(p-1,i,:)),ry(CPP(p-1,i,:)),CV(i),'LineWidth',2); % Plot points with determined color and shape
        hold on
        end
        plot(SCCx(p-1,:),SCCy(p-1,:),'*k','LineWidth',6); hold off
    end
    grid on
    pause(0.8)
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]陆维.基于改进粒子群优化的K-means算法在学生状态分析系统中的应用[J].佳木斯大学学报(自然科学版). 2014,32(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号