Simulation Matlab du clustering flou

1. Description du problème:

 L'analyse par grappes floues est une méthode mathématique qui utilise un langage mathématique flou pour décrire et classer les choses en fonction de certaines exigences. [1] L'   analyse de cluster floue se réfère généralement à la construction d'une matrice floue en fonction des attributs de l'objet de recherche lui - même , et sur cette base, à déterminer la relation de clustering en fonction d'un certain degré d'appartenance , c'est-à-dire à utiliser des mathématiques floues pour déterminer la relation floue entre les échantillons. Détermination quantitative, de manière à effectuer objectivement et avec précision le regroupement . Le clustering consiste à diviser l'ensemble de données en plusieurs classes ou clusters , de sorte que la différence de données entre chaque classe soit aussi grande que possible et que la différence de données entre les classes soit aussi petite que possible, c'est-à-dire "minimiser la similitude entre classes et maximiser Principe de similarité au sein de la classe

2. Une partie du programme:

 

% Fuzzy c-means clustering code MATLAB de l'algorithme FCM 

Le code MATLAB des deux formes itératives de l'algorithme% FCM: m fichier 1/7:
function [U, P, Dist, Cluster_Res, Obj_Fcn, iter] = fuzzycm (Data, C, plotflag, M, epsm)
% Fuzzy C agrégation moyenne Classe FCM: Itérer à partir de l'initialisation aléatoire de la matrice de division
% [U, P, Dist, Cluster_Res, Obj_Fcn, iter] = fuzzycm (Data, C, plotflag, M, epsm)
% Input:
% Data: N × S matrice, poly Les données originales de la classe, c'est-à-dire un ensemble limité d'échantillons d'observation,
chaque ligne de% Data est le vecteur de caractéristiques d'un échantillon d'observation, S est
la dimension du vecteur de caractéristiques % et N est le nombre de points d'échantillonnage
% C: nombre de clusters, 1 <C <N
% plotflag: indicateur de tracé 2D / 3D pour les résultats de clustering, 0 signifie pas de tracé, valeur par défaut        
% M: index pondéré, valeur par défaut 2
% epsm: seuil d'arrêt itératif de FCM algorithme, valeur par défaut 1.0e-6
% sortie:
% U: matrice de type C × N, matrice de partition FCM
% P: matrice de type C × S, centre de cluster FCM, chaque ligne correspond à un prototype de cluster
% Dist: type C × N Matrice, la distance entre chaque centre de cluster de FCM et chaque point d'échantillonnage, la distance entre le
centre i du centre de cluster et le point d' échantillonnage j est Dist (i, j)
% Cluster_Res: résultats du clustering, un total de C lignes, chaque ligne correspond à une catégorie
% Obj_Fcn: valeur de la fonction objectif
% iter: le nombre d'itérations de l'algorithme FCM
% Voir aussi: fuzzydist maxrowf fcmplot
if nargin <5
    epsm = 1.0e -6; 
fin
si nargin <4
    M = 2;
fin
si nargin <3
    plotflag = 0;
end
[N, S] = size (Data); m = 2 / (M-1); iter = 0;
Dist (C , N) = 0; U (C, N) = 0; P (C, S) = 0;
% Initialiser la matrice de partition au hasard
U0 = rand (C, N); 
U0 = U0 ./ (uns (C, 1 ) * sum (U0));
% FCM algorithme itératif
tandis que vrai 
    % compteur itératif
    iter = iter + 1; 
    % calcule ou met à jour le centre du cluster P
    Um = U0. ^ M;
    P = Um * Données ./ (uns (S, 1) * sum (Um '))';   
    % Mettre à jour la matrice de partition U
    pour i = 1: C
        pour j = 1: N
            Dist (i, j) = fuzzydist (P (i, :), Data (j, :));
        end
    end         
    U = 1 ./ (Dist. ^ m. * (ones (C, 1 ) * sum (Dist. ^ (- m))));          
    % Valeur de la fonction objective: somme d'erreur quadratique pondérée intra-classe
    si nargout> 4 | plotflag
        Obj_Fcn (iter) = sum (sum (Um. * Dist. ^ 2) );
    fin de la
    condition d'arrêt de l'itération de l'algorithme% FCM
    si norm (U-U0, Inf) <epsm
        break
    end
    U0 = U;   
end
% clustering result
if nargout> 3
    res = maxrowf (U);
    for c = 1: C
        v = find (res == c);
        Cluster_Res (c, 1: length (v)) = v;
    end
end
% plot
si plotflag
    fcmplot (Data, U, P, Obj_Fcn);
end
% m file 2/7:
function [U, P, Dist, Cluster_Res, Obj_Fcn, iter] = fuzzycm2 (Data, P0, plotflag, M, epsm)
% Moyenne C floue Clustering FCM: Itérer à partir du centre de cluster initial spécifié
% [U, P, Dist, Cluster_Res, Obj_Fcn, iter] = fuzzycm2 (Data, P0, plotflag, M, epsm)
% Input: Data, plotflag, M, epsm: See fuzzycm .m
% P0: Centre du cluster initial
% Sortie: U, P, Dist, Cluster_Res, Obj_Fcn, iter: Voir fuzzycm.m    
% Voir aussi: fuzzycm
si nargin <5
    epsm = 1.0e-6; 
fin
si nargin <4
    M = 2;
end
si nargin <3
    plotflag = 0;
end
[N, S] = size (Data); m = 2 / (M-1); iter = 0;
C = size (P0,1); Dist (C, N) = 0; U (C, N) = 0; P (C, S) = 0;
% algorithme itératif FCM
while true 
    % Iteration counter
    iter = iter + 1; 
    % Calculer ou mettre à jour la matrice de partition U
    pour i = 1: C
        pour j = 1: N
            Dist (i, j) = fuzzydist (P0 (i, :), Data (j , :));
        end
    end         
    U = 1 ./ (Dist. ^ m. * (ones (C, 1) * sum (Dist. ^ (- m))));      
    % mettre à jour le centre du cluster P
    Um = U. ^ M;
    P = Um * Data ./ (ones (S, 1) * sum (Um '))';   
    % valeur de la fonction objective: somme des erreurs quadratiques pondérées intra-classe
    si nargout> 4 | plotflag
        Obj_Fcn (iter) = sum ( sum (Um. * Dist. ^ 2));
    end
    % FCM condition d'arrêt de l'itération de l'algorithme
    si norm (P-P0, Inf) <epsm
        break
    end
    P0 = P;
end
% clustering result
if nargout> 3
    res = maxrowf (U);
    pour c = 1: C
        v = find (res == c);
        Cluster_Res (c, 1: length (v)) = v;
    end
end
% plot
if plotflag
    fcmplot (Data, U, P , Obj_Fcn);
fin
% m fichier 3/7:
fonction fcmplot (Data, U, P, Obj_Fcn)
% FCM fonction de traçage des résultats
% Voir aussi: fuzzycm maxrowf ellipse
[C, S] = taille (P); res = maxrowf ( U);
str = 'po * x + d ^ v> <. H'; 
% fonction objectif plot
figure (1), plot (Obj_Fcn)
title ('courbe de changement de valeur de fonction objectif', 'fontsize', 8)
% 2D Tracer
si S == 2 
    figure (2), tracer (P (:, 1), P (:, 2), 'rs'), tenir
    pour i = 1: C
        v = Data (find (res == i ), :); 
        plot (v (:, 1), v (:, 2), str (rem (i, 12) +1))      
        ellipse (max (v (:, 1)) - min (v (:, 1)), ...
                max (v (:, 2)) - min (v (:, 2)), ...
                [max (v (:, 1)) + min (v (:, 1)), ...
                max (v (:, 2)) + min (v (:, 2))] / 2, 'r:')    
    end
    grid on, title ('2D 聚类 结果 图', 'fontsize', 8), maintenez off
fin
% 3D 绘图
si S> 2 
    figure (2), plot3 (P (:, 1), P (:, 2), P (:, 3), 'rs'), maintenez
    pour i = 1: C
        v = Données (find (res == i), :);
        plot3 (v (:, 1), v (:, 2), v (:, 3), str (rem (i, 12) +1))      
        ellipse (max (v (:, 1)) - min (v (:, 1)), ...
                max (v (:, 2)) - min (v (:, 2)), ...
                [max (v (:, 1)) + min (v (:, 1)), ...
                max (v (:, 2)) + min (v (:, 2))) / 2, ...
                'r:', (max (v (:, 3)) + min (v (:, 3) )) / 2)   
    end
    grid on, title ('3D clustering result graph', 'fontsize', 8), hold off
end
%% m file 4/7:
function D = fuzzydist (A, B)
% Fuzzy clustering Analysis: La distance entre les échantillons
% D = fuzzydist (A, B)
D = norm (AB);
%% m File 5/7:
function mr = maxrowf (U, c)
% Trouvez l'emplacement du c-ième élément le plus grand dans chaque colonne de la matrice U OK, la valeur par défaut de c est 1
% Format d'appel: mr = maxrowf (U, c)
% Voir aussi: addr
if nargin <2
    c = 1;
end
N = size (U, 2); mr ( 1, N) = 0;
pour j = 1: N
    aj = addr (U (:, j), 'descendant');
    mr (j) = aj (c);
end
%% m Fichier 6/7:
fonction ellipse (a, b, centre, style, c_3d)
% Tracer une ellipse
% Appel: ellipse (a, b, center, style, c_3d)
% Entrée:
% a: La longueur de l'axe de l'ellipse (parallèle à l'axe x)
% b: La longueur de l'axe de l'ellipse (parallèle à l'axe y)
% center: Le centre de l'ellipse [x0, y0], la valeur par défaut est [0,0]
% style: Le type et la couleur de la ligne dessinée, la valeur par défaut est une ligne
continue bleue % c_3d: Le centre de l'ellipse est sur l'axe z dans l'espace 3D Coordonnées, peut être
défini par défaut si nargin <4
    style = 'b';
end
if nargin <3 | isempty (center)
    center = [0,0];
end
t = 1: 360 ;
x = a / 2 * cosd (t) + center (1);
y = b / 2 * sind (t) + center (2);
si nargin> 4
    plot3 (x, y, uns (1,360) * c_3d, style)
else
    plot (x, y, style)
end
%% m fichier 7/7:
function f = addr (a, strsort)
% renvoie l'index de chaque composant dans le vecteur d'origine après que le vecteur est arrangé dans l'ordre croissant ou décroissant
% 函数 调用: f = addr (a, strsort)
% strsort: 'ascend' ou 'descendant'
% par défaut est 'ascend'
% -------- exemple --------
% addr ([ 4 5 1 2]) renvoie ans:
% [3 4 1 2]
si nargin == 1
    strsort = 'ascend';
fin
sa = sort (a); ca = a;
la = longueur (a); f (la) = 0;
pour i = 1: la
    f (i) = find (ca == sa (i), 1);
    ca (f (i)) = NaN;
end
if strcmp (strsort, 'descendent')
    f = fliplr (f);
finir

3. Conclusion de la simulation:

D19

Je suppose que tu aimes

Origine blog.csdn.net/ccsss22/article/details/115175643
conseillé
Classement