function [mean1,class1]=ISODATA_1(x,K,theta_N,theta_S,theta_c,L)
%% step1
xx=x;I2=2;
mean1= cell(K,1);
mean1{1}=x(1,:);
for i=2:K
ds(i)=Distance1(xx(i,:),mean1{1});
[v1,v2]=max(ds);
mean1{i}=xx(v2,:);
xx(v2,:)=[];
end
n = size(x,1);
N_c = K;
ite = 1;
while ite<I2
flag = 1;
while flag
%% step2
class1 = cell(size(mean1));MM=0;
for i=1:n
num = Belong1(x(i,:),mean1);
class1{num} = [class1{num};x(i,:)];
end
for i=1:6
if isempty(class1{i})
MM=MM+1;
end
end
%% step3
for i=1:N_c
size_i = size(class1{i},1);
if size_i<theta_N
class_i = class1{i};
mean1 = DeleteRow(mean1,i);
class1 = DeleteRow(class1,i);
N_c = N_c-1;
for j=1:size_i
class_ij = class_i(j,:);%the j'th row of class{i}
num = Belong1(class_ij,mean1);
class1{num} = [class1{num};class_ij];
end
end
end
%% step4
for i=1:N_c
if ~isempty(mean1{i})
mean1{i} = sum(class1{i})./size(class1{i},1);
end
end
%% step5
Dis = zeros(N_c,1);
for i=1:N_c
if ~isempty(class1{i})
N_i =size(class1{i},1);
tmp = bsxfun(@minus,class1{i},mean1{i});
Dis(i) = sum(arrayfun(@(x)norm(tmp(x,:)),1:N_i))/N_i;
end
end
%% step6
D = 0;
for i=1:N_c
if ~isempty(class1{i})
N_i =size(class1{i},1);
D = D + N_i*Dis(i);
end
end
D = D/n;
%% step7
flag = 0;
if ite == I2
theta_c = 0;
flag = 0;
elseif ~(N_c > K/2)
flag = 1;
elseif mod(ite,2)==0 || ~(N_c<2*K)
flag = 0;
end
%% 分裂处理
%% step8
if flag
flag = 0;
delta = cell(N_c,1);
for i=1:N_c
if ~isempty(class1{i})
N_i =size(class1{i},1);
tmp = bsxfun(@minus,class1{i},mean1{i});
delta{i} = arrayfun(@(x)norm(tmp(:,x)),1:size(tmp,2))/N_i;
end
end
%% step9
delta_max = cell(N_c,1);
for i=1:N_c
if ~isempty(class1{i})
max_i = max(delta{i});
sub = find(delta{i}==max_i,1);
delta_max{i} = [max_i,sub];
end
end
%% step10
for i=1:N_c
if delta_max{i}(1) > theta_S
N_i =size(class1{i},1);
con1 = (Dis(i)>D && N_i>2*(theta_N + 1));
con2 = ~(N_c>K/2);
if con1 || con2
%%%%这里分裂%%%%%
flag = 1;%一旦发生分裂,那么分裂一次后就返回第二步;若没发生分裂,则直接进入合并处理步
lamda = 0.5;
max_sub = delta_max{i}(2);
mean1{i}(max_sub) = mean1{i}(max_sub) + lamda * delta_max{i}(1);
addOneMean = mean1{i};
addOneMean(max_sub) = addOneMean(max_sub) - lamda * delta_max{i}(1);
mean1 = [mean1;addOneMean];
N_c = N_c+1;
break;
end
end
end
end
end
%% 合并处理
if L
%% step11
Distance = zeros(N_c,N_c);
for i=1:N_c-1
for j=i:N_c
Distance(i,j) = norm(mean1{i}-mean1{j});
end
end
%% step12
index = find(-Distance>theta_c);
keepIndex = [Distance(index),index];
[~, index] = sort(keepIndex(:,1));
if size(index,1) > L
index = index(1:L,:);
end
%% step13
if size(index,1) ~= 0
for id=1:size(index,1)
[m_i m_j]= seq2idx(index(id),N_c);
%%%%%这里合并%%%%%
N_mi = size(class1{m_i},1);
N_mj = size(class1{m_j},1);
mean1{m_i} = (N_mi*mean1{m_i} + N_mj*mean1{m_j})/(N_mi+N_mj);
mean1 = DeleteRow(mean1,m_j);
class1{m_i} = [class1{m_i};class1{m_j}];
class1 = DeleteRow(class1,m_j);
end
end
end
%% step14
ite=ite+1;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
100基于改进ISODATA算法的负荷场景曲线聚类matlab.rar (18个子文件)
100基于改进ISODATA算法的负荷场景曲线聚类matlab
3060基于改进ISODATA算法的负荷场景曲线聚类
DBDI.m 275B
Distance2.m 385B
main.m 4KB
DMIN.m 358B
ISODATA_1.m 4KB
DeleteRow.m 209B
AVG.m 266B
Belong2.m 322B
DIAM.m 240B
日平均负荷.xls 355KB
Belong1.m 333B
Distance1.m 275B
基于机器学习的短期电力负荷预测和负荷曲线聚类研究_张辰睿.caj 4.12MB
seq2idx.m 173B
ISODATA_3.m 4KB
ISODATA.m 4KB
DCEN.m 361B
Belong3.m 540B
共 18 条
- 1
资源评论
- Jason_lvx2024-12-04资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。
小风飞子
- 粉丝: 374
- 资源: 1961
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Cursor Setup 0.43.6 - Build
- 目标检测数据集:鸟类头部图像检测数据【VOC标注格式、包含数据和标签】
- 荒地、水体、农田、湖检测14-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 2021九月最新视频打赏系统多套模板界面非常漂亮站长亲测
- 超好看倒计时特效单页html模板源码.zip
- 荒地、农田、森林、湖、山姆、住宅检测11-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 基于epoll的reactor模型
- 人力资源领域人员简历模板docx文档
- 使用python基于CNN的10种水果识别-含1w张以上的数据集图片
- 基于Delaunay三角化的点云数据三维曲面重建matlab仿真,包括程序,中文注释,仿真操作步骤视频
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功