Você está na página 1de 3

Funcional Fuzzy C-means

Javier Corredor
Objetivo: identificar los elementos para el cálculo del funcional c-means.

Considerando el capítulo 4:Fuzzy Clustering de las notas de clase, se busca minimizar el funcional

Observar que para cada cluster (c) se recorren todos los datos (N), calculando una distancia entre el
cluster actual y elemento actual

clear all;
c=2;
N=2;
z1=[2;3];z2=[7;2];v1=[2;1];v2=[5;3];
Z=[z1 z2];% Matriz de datos
V=[v1 v2];% Matriz de centros de los cluster
clf; grid on;
hold on;
xlim([0 9]);
ylim([0 5]);
h=plot(Z(1,:),Z(2,:),'o','color','blue');
plot(V(1,:),V(2,:),'x','color','red')
title('z1 y z2 son los datos a clasificar. V1 y V2 los centros de dos clusters')
text(z1(1),z1(2)+0.2,'z_1','color','blue')
text(z2(1),z2(2)+0.2,'z_2','color','blue')
text(v1(1),v1(2)+0.2,'\bf V_1','color','red')
text(v2(1),v2(2)+0.2,'\bf V_2','color','red')
 

Calculamos el funcional para los datos z1 y z2, donde los centros de los cluster son v1 y v2. Para esto,
es necesario calcular la distancia , que se define como:

Dependiendo como se escoja tenemos diferentes formas del cluster (Babuska'17)


Ejemplo cálculo del funcional

Consideramos la norma euclidiana que corresponde a la matriz identidad ( ). Para calcular


se requiere definir una matriz inicial con los valores de pertenencia a cada cluster ( ), esta matriz la
denominamos con la letra . que es un parámetro para la fusificación de la partición.

A=eye(2); %matriz identidad 2x2


U=rand(1,2); % Generamos números aleatorios para definir U
U=[U;1-U] % Partición difuza con restricción
m=2; % parámetro de fusificacion generalmente m=2.

Considerando el código anterior. Responda:

• Como se debería modificar el código para definir una matriz U, donde se define un partición hard y
una difusa sin restricción?
• Cómo se define la norma de Mahalonobis?

A continuación se presenta el cálculo del funcional c-means (se muestra de manera ilustrativa),
donde

for c=1:2
for k=1:2
D(c,k) = (Z(:,k)-V(:,c))'*A*(Z(:,k)-V(:,c)); % norma
Du(c,k) = U(c,k).^m*D(c,k); %
end
end
D
Du
J=sum(sum(Du))

Calcular el funcional para vectores del cluster y , cercanos a los vectores a clasificar y .

• Que valor del funcional espera obtener? mayor o menor?

z1a=v1;z2a=v2;%definimos los datos iguales a los centros del cluster


Z1=[z1a z2a];
clf; grid on;
hold on;
xlim([0 9]);
ylim([0 5]);
plot(Z1(1,:),Z1(2,:),'o','color','blue')
plot(V(1,:),V(2,:),'x','color','red')
title('Coincide ubicación datos y centros del cluster')
text(z1a(1),z1a(2)+0.2,'z_{1a}','color','blue')
text(z2a(1),z2a(2)+0.2,'z_{2a}','color','blue')
text(v1(1),v1(2)-0.2,'\bf V_1','color','red')
text(v2(1),v2(2)-0.2,'\bf V_2','color','red')

Calculamos nuevamente el funcional para los nuevos datos

clear D Du;
for c=1:2
for k=1:2
D(c,k) = (Z1(:,k)-V(:,c))'*A*(Z1(:,k)-V(:,c));
Du(c,k) = U(c,k).^m*D(c,k);
end
end
D
Du
J1=sum(sum(Du))

• Para qué sirve el parámetro , qué significa un valor cercano a 1? y un valor grande? y cero?

Comandos útiles en matlab


Para cada uno de los primeros cuatro comandos identificar la función y los argumentos de entrada
y salida. Experimente con el demo de Fuzzy Clustering disponible en matlab >> fcmdemo y la
herramienta gui findcluster.

help initfcm
help stepfcm
help fcm
help distfcm
%fcmdemo
%findcluster

Referencias

[Babuska'17] Robert Babuska and Jens Kober, Knowlege-Based Control Systems, Lecture Notes, V
2015-1-2107