⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2维fcm.txt

📁 2维的FCM算法matlab程序。传上来跟大家交流一下
💻 TXT
📖 第 1 页 / 共 2 页
字号:
elseif strcmp(action, 'label_data'),
    cluster_n = get(findobj(FcmFigH, 'tag', 'cluster_number'), 'value')+1;
    dataplotH = get(findobj(FcmFigH, 'tag', 'data_set'), 'userdata');
    data = get(dataplotH, 'userdata');
    labelH = get(findobj(FcmFigH, 'tag', 'label_data'), 'userdata');
    label_data = get(findobj(FcmFigH, 'tag', 'label_data'), 'value');
    if label_data ~= 0,
        set(dataplotH, 'visible', 'off');
        maxU = max(FcmU);
        for i = 1:cluster_n,
            index = find(FcmU(i, :) == maxU);
            cluster = data(index', :);
            if isempty(cluster), cluster = [nan nan]; end
            set(labelH(i), 'xdata', cluster(:, 1), ...
                'ydata', cluster(:, 2));
        end
        set(labelH, 'visible', 'on');
    else
        set(dataplotH, 'visible', 'on');
        set(labelH, 'visible', 'off');
    end
elseif strcmp(action, 'get_data'),
    getDataH = findobj(FcmFigH, 'tag', 'data_set');
    dataID = get(getDataH, 'value'); 
    no_change = 0;
    if dataID == 1,
        data_n = 400;
        data = rand(data_n, 2);
        % === cluster 1
        dist1 = distfcm([0.2 0.2], data);
        index1 = (dist1 < 0.15)';
        % === cluster 2
        dist2 = distfcm([0.7 0.7], data);
        index2 = (dist2 < 0.25)';
        % === cluster 3
        index3 = data(:,1) - data(:, 2) - 0.1 < 0;
        index4 = data(:,1) - data(:, 2) + 0.1 > 0;
        index5 = data(:,1) + data(:, 2) - 0.4 > 0;
        index6 = data(:,1) + data(:, 2) - 1.4 < 0;
        % === final data
        data(find((index1|index2|(index3&index4&index5&index6)) ...
            == 0), :) = [];
    elseif dataID == 2,
        data_n = 100;
        % === cluster 1
        c1 = [0.6 0.2]; radius1 = 0.2;
        data1 = randn(data_n, 2)/10 + ones(data_n, 1)*c1;
        % === cluster 2
        c2 = [0.2 0.6]; radius2 = 0.2;
        data2 = randn(data_n, 2)/10 + ones(data_n, 1)*c2;
        % === cluster 3
        c3 = [0.8 0.8]; radius3 = 0.2;
        data3 = randn(data_n, 2)/10 + ones(data_n, 1)*c3;
        % === final data
        data = [data1; data2; data3];
        index = (min(data')>0) & (max(data')<1);
        data(find(index == 0), :) = [];
    elseif dataID == 3,
        data_n = 100;
        k = 10;
        c1 = [0.125 0.25];
        data1 = randn(data_n, 2)/k + ones(data_n, 1)*c1;
        c2 = [0.625 0.25];
        data2 = randn(data_n, 2)/k + ones(data_n, 1)*c2;
        c3 = [0.375 0.75];
        data3 = randn(data_n, 2)/k + ones(data_n, 1)*c3;
        c4 = [0.875 0.75];
        data4 = randn(data_n, 2)/k + ones(data_n, 1)*c4;
        data = [data1; data2; data3; data4];
        index = (min(data')>0) & (max(data')<1);
        data(find(index == 0), :) = [];
    elseif dataID == 4,
        data_n = 100;
        % === cluster 1
        c1 = [0.2 0.2];
        data1 = randn(data_n, 2)/15 + ones(data_n, 1)*c1;
        % === cluster 2
        c2 = [0.2 0.5];
        data2 = randn(data_n, 2)/15 + ones(data_n, 1)*c2;
        % === cluster 3
        c2 = [0.2 0.8];
        data3 = randn(data_n, 2)/15 + ones(data_n, 1)*c2;
        % === cluster 4
        c3 = [0.8 0.5];
        data4 = randn(data_n, 2)/10 + ones(data_n, 1)*c3;
        % === final data
        data = [data1; data2; data3; data4];
        index = (min(data')>0) & (max(data')<1);
        data(find(index == 0), :) = [];
    elseif dataID == 5,
        data_n = 300;
        data = rand(data_n, 2);
    elseif dataID == 6, % Customized data set
        data_file = uigetfile('*.dat');
        if data_file == 0 | data_file == '',    % cancelled
            no_change = 1;
        else        % loading data
            eval(['load ' data_file]);
            tmp = find(data_file=='.');
            if tmp == [],   % data file has no extension.
                eval(['data=' data_file ';']);
            else
                eval(['data=' data_file(1:tmp-1) ';']);
            end
            if size(data, 2) ~= 2,
                fprintf('Given data is not 2-D!\n');
                no_change = 1;
            end
        end
    else
        error('Selected data not found!');
    end
    if no_change,
        set(getDataH, 'value', OldDataID); 
    else
        % normalize data set
        maxx = max(data(:,1)); minx = min(data(:,1));
        data(:,1) = (data(:,1)-minx)/(maxx-minx); 
        maxy = max(data(:,2)); miny = min(data(:,2));
        data(:,2) = (data(:,2)-miny)/(maxy-miny); 
        % process data
        OldDataID = dataID; 
        delete(get(FcmAxisH, 'child'));
%        set(FcmFigH, 'color', get(FcmFigH, 'color'));
refresh(FcmFigH);
        dataplotH = line(data(:, 1), data(:, 2), 'color', 'g', ...
            'LineStyle', 'none', 'Marker', 'o', 'visible', 'off', ...
            'clipping', 'off');
        set(dataplotH, 'userdata', data);
        set(getDataH, 'userdata', dataplotH);
    end
elseif strcmp(action, 'init_U'),
    cluster_n = get(findobj(FcmFigH, 'tag', 'cluster_number'), ...
        'value')+1;
    dataplotH = get(findobj(FcmFigH, 'tag', 'data_set'), 'userdata');
    data = get(dataplotH, 'userdata');
    data_n = size(data, 1);
    FcmU = initfcm(cluster_n, data_n);
elseif strcmp(action, 'display_data'),
    label_data = get(findobj(FcmFigH, 'tag', 'label_data'), 'value');
    dataplotH = get(findobj(FcmFigH, 'tag', 'data_set'), 'userdata');
    labelH = get(findobj(FcmFigH, 'tag', 'label_data'), 'userdata');
    if label_data == 0,
        set(dataplotH, 'visible', 'on');
        set(labelH, 'visible', 'off');
    else
        set(dataplotH, 'visible', 'off');
        set(labelH, 'visible', 'on');
    end
elseif strcmp(action, 'cluster_number'),
    eval([mfilename, '(''init_U'')']);
    delete(get(findobj(FcmFigH, 'tag', 'label_data'), 'userdata'));
    delete(findobj(FcmFigH, 'tag', 'headH'));
    delete(findobj(FcmFigH, 'tag', 'trajH'));
    delete(findobj(FcmFigH, 'tag', 'selectH'));
    FcmCenter = [];
    set(findobj(FcmFigH, 'tag', 'mf_plot'), 'userdata', []);
    eval([mfilename, '(''label_data0'')']);
    eval([mfilename, '(''display_data'')']);
elseif strcmp(action, 'clear_traj'),
    if ~isempty(findobj(FcmFigH, 'string', 'Start')),
% set(FcmFigH, 'color', get(FcmFigH, 'color'));
refresh(FcmFigH);
        delete(findobj(FcmFigH, 'tag', 'trajH'));
    end
elseif strcmp(action, 'clear_all'),
    if ~isempty(findobj(FcmFigH, 'string', 'Start')),
% set(FcmFigH, 'color', get(FcmFigH, 'color'));
refresh(FcmFigH);
        delete(findobj(FcmFigH, 'tag', 'headH'));
    end
elseif strcmp(action, 'close'),
    set(findobj(FcmFigH, 'string', 'Close'), 'userdata', 1);
    if ~isempty(findobj(FcmFigH, 'string', 'Start')),
        delete(FcmFigH);
    end
elseif strcmp(action, 'mf_plot'),
    old_pointer = get(FcmFigH, 'pointer');
    set(FcmFigH, 'pointer', 'watch');
    % looping till mouse action is done
    which_cluster = get(findobj(FcmFigH, 'tag', 'mf_plot'), 'userdata');
    if isempty(which_cluster),
        fprintf('Use mouse to select a cluster first.\n');
    else
        title = ['MF Plot for Cluster ', int2str(which_cluster)];
        MfFigH = findobj(0, 'Name', title);
        if isempty(MfFigH), % create a new MF plot
            dataplotH = get(findobj(FcmFigH, 'tag', 'data_set'), 'userdata');
            data = get(dataplotH, 'userdata');
            tmp = FcmU';
            % use griddata to do surface plot
            fprintf('Using "griddata" to plot MF surface ...\n');
            [XI, YI] = meshgrid(0:0.1:1, 0:0.1:1);
            ZI = griddata(data(:,1), data(:, 2), tmp(:, which_cluster), XI, YI);
            % Create a new figure window
            pos = get(0, 'defaultfigurepos');
            pos(3) = pos(3)*0.75; pos(4) = pos(4)*0.75;
            MfFigH = figure('Name', title, ...
                'NumberTitle', 'off', 'position', pos, 'DockControls','off');
     % V4 color default
     colordef(MfFigH, 'black');
            mesh(XI, YI, ZI);
            xlabel('X'), ylabel('Y'), zlabel('MF');
            axis([0 1 0 1 0 1]); set(gca, 'box', 'on');
            rotate3d on;
            set(MfFigH, 'HandleVisibility', 'callback');
        end
        set(0, 'Currentfigure', MfFigH);
    end
    set(FcmFigH, 'pointer', old_pointer);
elseif strcmp(action, 'set_mouse_action'),
    % action when button is first pushed down
    action1 = [mfilename '(''mouse_action1'')'];
    % actions after the mouse is pushed down
    action2 = ' ';
    % action when button is released
    action3 = ' ';
    % temporary storage for the recall in the down_action
    set(gca,'UserData',action2);
    % set action when the mouse is pushed down
    down_action=[ ...
        'set(gcf,''WindowButtonMotionFcn'',get(gca,''UserData''));' ...
        action1];
    set(gcf,'WindowButtonDownFcn',down_action);
    % set action when the mouse is released
    up_action=[ ...
        'set(gcf,''WindowButtonMotionFcn'','' '');', action3];
    set(gcf,'WindowButtonUpFcn',up_action);
elseif strcmp(action, 'mouse_action1'),
    curr_info = get(gca, 'CurrentPoint');
    CurrPt = [curr_info(1, 1) curr_info(1,2)];
    if ~isempty(FcmCenter),
        [junk, which_cluster] = min(distfcm(CurrPt, FcmCenter));
        set(findobj(gcf, 'tag', 'mf_plot'), 'userdata', which_cluster);
        delete(findobj(gcf, 'tag', 'selectH'));
        selectH = line(FcmCenter(which_cluster, 1), FcmCenter(which_cluster, 2), ...
            'tag', 'selectH', 'LineStyle', 'none', 'Marker', 'o', 'markersize', 30);
    end
elseif strcmp(action, 'exponent'),
    expo = str2double(get(findobj(FcmFigH, 'tag', 'exponent'), 'string'));
    if expo <= 1,
        fprintf('The exponent for MF''s should be greater than 1!\n');
        set(findobj(FcmFigH, 'tag', 'exponent'), 'string', num2str(1.01));
    end
elseif strcmp(action, 'info'),
    helpwin(mfilename);
%   title = '2-D Fuzzy C-means Clustering';
%   help_string = ...        
%   [' You are seeing fuzzy C-means clustering         '  
%    ' when the data sets are 2-dimensional. You can   '  
%    ' choose the data set and clustering number from  '  
%    ' the GUI buttons at right, and then click        '  
%    ' "Start" to start the fuzzy clustering process.  '  
%    '                                                 '  
%    ' Once the clustering is done, you can select     '  
%    ' one of the clusters by mouse and view the MF    '  
%    ' surface by clicking the "MF Plot" button.       '  
%    '                                                 '  
%    ' If you choose to use a customized data set,     '  
%    ' it must be 2-D data. Moreover, the data set     '  
%    ' is normalized to within the unit cube           '  
%    ' [0,1] X [0,1] before being clustered.           '  
%    '                                                 '  
%    ' File name: fcmdemo.m                            '];
%   fhelpfun(title, help_string);
else
    fprintf('Given string is "%s".\n', action);
    error('Unrecognized action string!');
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -