聚类分析 | Matlab基于ISODATA改进算法的负荷场景曲线聚类
目录
- 聚类分析 | Matlab基于ISODATA改进算法的负荷场景曲线聚类
- 效果一览
- 基本介绍
- 程序设计
- 参考资料
效果一览
基本介绍
负荷场景曲线聚类是指将电力系统中的负荷曲线数据进行聚类分析,以发现相似的负荷行为模式。这种聚类分析可以帮助电力系统运营商或能源管理者更好地理解负荷需求和负荷特征,从而进行合理的负荷预测、负荷调度和能源规划。基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成)代码主要做的是一种基于改进ISODATA算法的负荷场景曲线聚类,代码中,主要做了四种聚类算法,包括基础的K-means算法、ISODATA算法、L-ISODATA算法以及K-L-ISODATA算法,并且包含了对聚类场景以及聚类效果的评价,通过DBI的计算值综合对比评价不同方法的聚类效果,程序实现效果非常好,适合对于算法创新有需求的人,且也包含基础的k-means算法,用来学习也非常棒!另外,此代码同样适用于风光场景生成,自己准备好风光场景数据即可!。
程序设计
- 完整源码和数据获取方式私信博主回复数据聚类 | Matlab基于ISODATA改进算法的负荷场景曲线聚类。
%% 导入数据
clear all
data_load=xlsread('日平均负荷.xls');
x=data_load;
k_num=0;k_num1=0;
%% 初始化
km=6;K=6;Kl=6;K3=6;%定义预期的聚类中心数
theta_N=1;% theta_N : 每一聚类中心中最少的样本数,少于此数就不作为一个独立的聚类
theta_S=1;% theta_S :一个聚类中样本距离分布的标准差
theta_c=3;% theta_c : 两聚类中心之间的最小距离,如小于此数,两个聚类进行合并
L=1;% L : 在一次迭代运算中可以和并的聚类中心的最多对数
%% K=means 方法聚类结果
[IDW,CW,sumdw,DW] = kmeans(x,km);
Clust = cell(km,1);
for i=1:km
CW1{i,1}=CW(i,:);
end
for i=1:km
clustw1=find(IDW==i);
Clust{i} = x(clustw1,:);
end
%% K-means 聚类结果图
for i=1:km
figure
subplot(2,1,1);
plot(CW(i,:)/(max(CW(i,:))),'-');xlabel('采样点');ylabel('标幺值');axis([1 92 -inf inf])
titlemane=strcat('k-means第',num2str(i),'聚类中心(归一化)');
title(titlemane)
subplot(2,1,2);
cu=Clust{i};
plot(cu','-');xlabel('采样点');ylabel('负荷');axis([1 92 -inf inf])
titlemane=strcat('k-means第',num2str(i),'场景聚类');
title(titlemane)
end
%% ISODATA聚类方法
[AA,BB]=ISODATA(x,K,theta_N,theta_S,theta_c,L);
for i=1:K
if size(AA{i},2)==1
k_num1=k_num1+1;
AA{i,1}=[];
BB{i,1}=[];
end
end
AA(cellfun(@isempty,AA))=[];
BB(cellfun(@isempty,BB))=[];
%% ISODATA 聚类结果图
for i=1:K
figure
subplot(2,1,1)
plot(AA{i}/max(AA{i}));xlabel('采样点');ylabel('标幺值');axis([1 92 -inf inf])
titlemane=strcat('ISODATA方法第',num2str(i),'类中心(归一化)');
title(titlemane)
subplot(2,1,2)
cla=BB{i};
plot(cla','-');xlabel('采样点');ylabel('负荷');axis([1 92 -inf inf])
titlemane2=strcat('ISODATA方法第',num2str(i),'类聚类结果');
title(titlemane2)
end
%% L-isodata
[AA3,BB3]=ISODATA_3(x,K3,theta_N,theta_S,theta_c,L);
for i=1:K3
if size(AA3{i},2)==1
k_num1=k_num1+1;
AA3{i,1}=[];
BB3{i,1}=[];
end
end
AA3(cellfun(@isempty,AA3))=[];
BB3(cellfun(@isempty,BB3))=[];
%% L-ISODATA 聚类结果图
for i=1:size(AA3,1)
figure
subplot(2,1,1)
plot(AA3{i}/max(AA3{i}));xlabel('采样点');ylabel('标幺值');axis([1 92 -inf inf])
titlemane=strcat('L-ISODATA方法第',num2str(i),'类中心(归一化)');
title(titlemane)
subplot(2,1,2)
cla=BB3{i};
plot(cla','-');xlabel('采样点');ylabel('负荷');axis([1 92 -inf inf])
titlemane2=strcat('L-ISODATA方法第',num2str(i),'类聚类结果');
title(titlemane2)
end
%% K-L-isodata
[AA1,BB1]=ISODATA_1(x,Kl,theta_N,theta_S,theta_c,L);
for i=1:Kl
if size(AA1{i},2)==1
k_num=k_num+1;
AA1{i,1}=[];
BB1{i,1}=[];
end
end
AA1(cellfun(@isempty,AA1))=[];
BB1(cellfun(@isempty,BB1))=[];
%% DBI DI 指数计算
[k_dbi,k_di]=DBDI(Clust,CW1,km);% k-means DBI DI 指数计算
[dbi,di]=DBDI(BB,AA,K);% ISODATA DBI DI 指数计算
[l_dbi,l_di]=DBDI(BB3,AA3,size(AA3,1));% L-ISODATA DBI DI 指数计算
[kl_dbi,kl_di]=DBDI(BB1,AA1,size(AA1,1));% K-L-ISODATA DBI DI 指数计算
figure
bar3([k_di,k_dbi;di,dbi;l_dbi,l_di;kl_dbi,kl_di]);
set(gca,'yticklabel',{'k-means', 'ISODATA','L-ISODATA','K-L-ISODATA'});
set(gca,'xticklabel',{ 'DBI','DI'});