【数据聚类】基于改进的粒子群算法优化K-means算法实现数据分类含Matlab源码
生活随笔
收集整理的這篇文章主要介紹了
【数据聚类】基于改进的粒子群算法优化K-means算法实现数据分类含Matlab源码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 簡介
針對傳統(tǒng)的K—means算法對初始聚類中心的選取敏感,容易收斂到局部最優(yōu)的缺點,提出一種基于改進粒子群優(yōu)化算法(PSO)的K—means優(yōu)化聚類算法.該算法利用PSO算法強大的全局搜索能力對初始聚類中心的選取進行優(yōu)化:通過動態(tài)調整慣性權重等參數(shù)增強PSO算法的性能;利用群體適應度方差決定算法中前部分PSO算法和后部分K—means算法的轉換時機;設置變量實時監(jiān)控各個粒子和粒子群的最優(yōu)值變化情況,及時地對出現(xiàn)早熟收斂的粒子進行變異操作,從而為K—means算法搜索到全局最優(yōu)的初始聚類中心,使聚類結果不受初始聚類中心影響,易于獲得全局最優(yōu)解.實驗結果表明文中提出的改進算法與傳統(tǒng)聚類算法相比具有更高的聚類正確率,更好的聚類質量及全局搜索能力.
2 部分代碼
function A=TwoSideUpDownRealCross1(A,field,objfunction,probability) %橫向交叉lw=size(A,2);popsize=size(A,1);% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% p0=[98.4,134.0,141.5,183.3,125.0,91.3,401.1,329.5,386.1,427.3,412.2,370.1,301.8,368.0,301.9,476.4,283.1,414.1,328.0,389.4,354.7,262.0,461.5,371.6,462.6,379.2,530.8,391.9,480.1,319.0,329.5,333.8,390.0,432.0,402.0,428.0,178.4,194.1,474.0,609.8,17.8,6.9,224.3,210.0,212.0,200.8,220.0,232.9,168.0,208.4,443.9,426.0,434.1,402.5,357.4,423.0,220.0,369.4,273.5,336.0,432.0,220.0,410.6,422.7,351.0,296.0,411.1,263.2,370.3,418.7,409.6,412.0,423.2,428.0,436.0,428.0,425.0,497.2,510.0,470.0,464.1,118.1,141.3,132.0,135.0,252.0,221.0,245.9,247.9,183.6,288.0,557.4,529.5,800.8,801.5,582.7,680.7,670.7,651.7,921.0,916.8,911.9,898.0,905.0,846.5,850.9,843.7,841.4,835.7,828.8,846.0,179.0,120.8,121.0,317.4,318.4,335.8,151.0,129.5,130.0,218.9,5.4,45.0,20.0,16.3,20.0,22.1,125.0,10.0,13.0,7.5,53.2,6.4,69.1,49.9,91.0,41.0,13.7,7.4,28.6];% for i=1:popsize% [Temfit(i),A(i,:)]=objfunction(A(i,:),p0,1);% end% [Y,I] = sort(Temfit); % % for i=popsize/2+1:popsize% no1=ceil(rand*popsize/2);% no=i;% for j=1:lw % cr=rand();% r=2*(rand()-0.5);% firstcross(j)= A(no,j)*cr+A(no1,j)*(1-cr)+r*(A(no,j)-A(no1,j)); % if firstcross(j)>field(1,j)% firstcross(j)= field(1,j);% end% if firstcross(j)<field(2,j)% firstcross(j)= field(2,j);% end% % end % % A(no,:)=firstcross;% % % end% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%D=sum(A,2);F=sum(A);crossmatrix=randperm(popsize); for i=0:popsize/2-1 p=rand(); if p<probability no=crossmatrix(i*2+1); no1=crossmatrix(i*2+2); for j=1:lw cr=rand(); r=2*(rand()-0.5); %r=0; firstcross(j)= A(no,j)*cr+A(no1,j)*(1-cr)+r*(A(no,j)-A(no1,j)); cr=rand(); r=2*(rand()-0.5); secondcross(j)= A(no1,j).*cr+A(no,j).*(1-cr)+r*(A(no1,j)-A(no,j));? if firstcross(j)>field(1,j) firstcross(j)= field(1,j); end if firstcross(j)<field(2,j) firstcross(j)= field(2,j); end if secondcross(j)>field(1,j) secondcross(j)= field(1,j); end if secondcross(j)<field(2,j) secondcross(j)= field(2,j); end end A(no,:)=firstcross; A(no1,:)=secondcross; end end? end?3 仿真結果
4 參考文獻
[1]謝秀華, 李陶深. 一種基于改進PSO的K-means優(yōu)化聚類算法[J]. 計算機技術與發(fā)展, 2014, 24(2):5.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡預測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡文獻,若有侵權聯(lián)系博主刪除。
?
總結
以上是生活随笔為你收集整理的【数据聚类】基于改进的粒子群算法优化K-means算法实现数据分类含Matlab源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟化六大安全问题 解决刻不容缓
- 下一篇: Doris 数据聚合