1 主要内容
程序复现文献《基于机器学习的短期电力负荷预测和负荷曲线聚类研究》第三章《基于改进ISODATA算法的负荷场景曲线聚类》模型,该方法不止适用于负荷聚类,同样适用于风光等可再生能源聚类,只需要改变聚类的数据即可,该方法的通用性和可创新性强。
该代码实现一种基于改进ISODATA算法的负荷场景曲线聚类方法,代码中,主要做了四种聚类算法,包括基础的K-means算法、ISODATA算法、L-ISODATA算法以及K-L-ISODATA算法,并且包含了对聚类场景以及聚类效果的评价,通过DBI的计算值综合对比评价不同方法的聚类效果,程序将四种方法均进行了实现,非常方便大家对照学习!
2 部分代码
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
3 程序结果