Modelos, Control y Sistema de Visión

Central     Modelos     Control     Visión     Aplicaciones     Mapa del sitio     Publicaciones     Sobre el autor      
El algoritmo de fuzzy c-means clustering
 
                                                  Presentación
 

Este algoritmo de agrupamiento es una variante del algoritmo k-means clustering. La diferencia entre ambos radica en que en este último cada dato pertenece a un único grupo (identificado como 1 en la matriz de pertenencias u), el algoritmo de fuzzy c-means permite la existencia de pertenencia parcial de un dato a más de un grupo. Otra diferencia radica en el método de actualizar los centroides.
 
Para mostar el principio del algoritmo, supóngase que se dispone del siguiente conjunto de datos:
 
>> z=[1 1 1 2 3 4 5 5 5; 1.5 2 2.5 2 2 2 1.5 2 2.5]
 
Si se desean obtener dos centroides (c=2), estos pueden inicializarse dentro del intervalo de definición de los datos:
>> v=[1 2.25; 5 1.25];
 

 
tal y como muestra la siguiente figura
 

La pertenencia de los datos a cada centroide se calcula utilizando la siguiente ecuación
 
 
para lo que se puede utilizar el siguiente programa
 

% Datos de entrada
x=[1 1 1 2 3 4 5 5 5]';
y=[1.5 2 2.5 2 2 2 1.5 2 2.5]';
z=[x, y];

% Centroides iniciales
v=[1 2.25; 5 1.25];

% Condiciones iniciales
m=2; c=2;

% Tamaño de matriz de datos
[L,D]=size(z);

% Se calcula los grados de pertenencia
for l=1:L
for j=1:c
%Suma de distancias
suma(j)=sum((z(l,1)-v(j,1))^2+(z(l,2)-v(j,2))^2);
end

for j=1:c
sumaa(j)=0;
for i=1:c
sumaa(j)=sumaa(j)+suma(j)/suma(i);
end
% Matriz de pertenencias
u(l,j)=1/sumaa(j)
end
end


Los grados de pertenecia resultan
>>u'
u=
0.9662 0.9962 0.9965 0.9000 0.5290 0.1471 0.0038 0.0338 0.0887
0.0338 0.0038 0.0035 0.1000 0.4710 0.8529 0.9962 0.9662 0.9113
 
Lo cual puede interpretarse como que los cinco primeros valores pertenecen al grupo o centroide 1 y los restantes 4 al centroide 2.
 
Una vez que se calcula los grados de pertenencia de cada valor de la matriz de datos a cada centroide, se deben actualizar el valor de los centroides, para lo que se aplica la siguiente ecuación 
 
 
lo que puede implementarse a través del siguiente programa
 

% Determinar el nuevo valor de los centroides
for j=1:c
vn(1)=0; vn(2)=0;
vd(1)=0; vd(2)=0;
for l=1:L
%Primer término del centroide
vn(1)=vn(1)+u(l,j)^2*z(l,1);
vd(1)=vd(1)+u(l,j)^2;
% Segundo término del centroide
vn(2)=vn(2)+u(l,j)^2*z(l,2);
vd(2)=vd(2)+u(l,j)^2;
end
v(j,1)=vn(1)/vd(1);
v(j,2)=vn(2)/vd(2);
end

 
lo cual actualiza el nuevo valor de los centroides a:
v =
1.3641 2.0083
4.6756 1.9781
 
Si se vuelve a recalcular la matriz de pertenencia resulta
>> u'
0.9723 0.9903 0.9736 0.9465 0.5120 0.0617 0.0242 0.0079 0.0273
0.0277 0.0097 0.0264 0.0535 0.4880 0.9383 0.9758 0.9921 0.9727
 
y reactualizar los valores que representan a los centroides
v =
1.3560 2.0003
4.6576 1.9992
 
El resultado se muestra en la siguiente figura
 
 
Función cmeans en Matlab
 
El toolbox de fuzzy logic en Matlab tiene una función que calcula directamente el algoritmo aquí expuesto. Esta función responde a:

[CENTER, U] = FCM(DATA,N_CLUSTER,OPTIONS)
donde:
CENTER: Coordenadas de los centroides
U: Matriz de pertenencia
OPTIONS(1): Exponente de la matriz U (implícito: 2.0)
OPTIONS(2): máximo número de iteraciones (implícito: 100)
OPTIONS(3): Diferencia entre variaciones de centroides deseado (implícito: 1e-5)
OPTIONS(4): mostrar las iteraciones (implícito: 1)

Un ejemplo de su aplicación se muestra a continuación
 

% Datos de entrada

x=[0 0 0 1 1 1 2 3 4 5 5 5 6 6 6]';
y=[1 2 3 1.5 2 2.5 2 2 2 1.5 2 2.5 1 2 3]';
x1=x+7;
y1=y.*2;
x2=x1+7;
y2=y.*(-2);
x=[x; x1; x2];
y=[y; y1; y2];
z=[x, y];

[v]=fcm(z,2); % Ejecuta el algoritmo

% Dibuja
figure
plot(z(:,1),z(:,2),'p');
hold on;
plot(v(:,1),v(:,2),'s');


El resultado se muestra en la siguiente figura
 

 

Otras funciones Matlab de utilidad son:

findcluster: Interfaz gráfica de usuario
genfis3: Sistema de inferencia borroso

 

Referencias:


Yen, J.; Langari, R.:”Fuzzy Logic: Intelligence, Control and Information”. Prentice Hall. 1999.