• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-08-19
  • 语言: Matlab
  • 标签: MATLAB  K_means  

资源简介

用于负荷数据曲线分析,输入曲线数据,输出分类结果,并可视化显示聚类效果。该方法采用均一化、曲线平滑、特殊值处理、DB值评价聚类结果、自动选择聚类数等过程,能够较好的完成曲线数据处理。

资源截图

代码片段和文件信息

%% 数据读取 生成随机矩阵
clear;
list = importdata(‘list.txt‘);  %%call by list{n}
list = char(list);
data = load(“data.txt“);
[m n] = size(data);
flog = fopen(‘log.txt‘‘w‘);    %日志文件
fprintf(flog‘%s\r\n‘‘20180726最大负荷日 支路数据‘);

%% 数据预处理
zero_num = 0;   % 除零
fid = fopen(‘all_zero.txt‘‘w‘);
new_data = zeros(1n);
for i = 1:m
    if sum(data(i:)) == 0    %检测存储全零数据
        zero_num = zero_num+1;
        fprintf(fid‘%s\r\n‘list(i:));
    else
        new_data(i-zero_num:) = data(i:);
        new_list(i-zero_num:) = list(i:); %#ok
    end
end
%disp([‘滤除全零数据共‘num2str(zero_num)‘条‘]);
fprintf(flog‘%s\r\n‘[‘滤除全零数据共‘num2str(zero_num)‘条‘]);
fclose(fid);
clear data list zero_num;

rng default;    % 取样
[bootstatsub] = bootstrp(1@meannew_data);
[m n] = size(new_data);


%% %曲线平滑  异常值处理
inv_num=0;
for i = 1:m
    new_data(i:) = smooth(new_data(i:)10‘rlowess‘);  %曲线平滑
    %moving rlowess rloess
    
    %new_data(i:) = zscore(new_data(i:));   %归一化处理
    [new_data(i:)~] = mapminmax(new_data(i:)01);
    
    if abs(max(new_data(i:)) - min(new_data(i:))) < 0.000001  %处理恒不变数据
        new_data(i:) = ones(1 n);
        inv_num = inv_num+1;
    end
end
%disp([‘处理恒不变数据共‘num2str(inv_num)‘条‘]);
fprintf(flog‘%s\r\n‘[‘处理恒不变数据共‘num2str(inv_num)‘条‘]);
clear inv_num ;

%% 自带函数进行mean聚类
cluster = zeros(m1);
for K = 1:sqrt(m/2)
    [cluster(:K)] = kmeans(new_dataK);   %保存每次聚类结果‘replicate‘5 迭代次数
    % [idxcenter] = kmeans(new_data K);
end
eva = evalclusters(new_datacluster‘DaviesBouldin‘);  %DB参数评估最佳聚类数
[~DB_max] = max(eva.CriterionValues);

fprintf(flog‘%f\r\n‘eva.CriterionValues);
% eva2 = evalclusters(new_datacluster‘CalinskiHarabasz‘);
% [~CH_max] = max(eva2.CriterionValues);
% eva3 = evalclusters(new_datacluster‘Silhouette‘);
% [~SH_max] = max(eva3.CriterionValues);

pattern=zeros(m n+1);       %结果存储
pattern(:1:n) = new_data(::);
%pattern(:1+n) = cluster(: 

评论

共有 条评论