Grupos próximos a un entorno |
Este método de aprendizaje se diferencia de los métodos k-means clustering y fuzzy c-means clustering en que no es necesario definir a priori el número de grupos que se desea, generándose de forma automática el número de centroides basado en los datos observados. En su caso, es necesario definir un radio que determinará el número de grupos representativos, equivalentes a reglas de un sistema borroso. Los pasos fundamentales para crear un sistema borroso por grupos próximos son los siguientes:
[Paso 1].- Se define el primer conjunto de datos como un grupo, y la regla que lo identifica.
[Paso 2].- Se determina (cuando exista un conjunto de reglas), el grupo de variables que constituyen la parte precedente de las reglas más próximo al nuevo conjunto de datos.
[Paso 3].- Si el nuevo grupo está fuera de un rango de proximidad definido por un radio r, se incorpora una nueva regla; si no, se considera que el nuevo grupo es identificable por la regla más próxima existente, por lo que no se incorpora al conjunto de reglas.
[Paso 4].- Se realiza la inferencia aplicando la siguiente ecuación [1] donde M representa al número de grupos (reglas borrosas). Los restantes parámetros se describen en el algoritmo que se desarrolla más adelante. [Paso 5].- Se repite el algoritmo a partir del [Paso 2].
Una representación gráfica del proceso de formación de los grupos se muestra en la siguiente figura

El nuevo grupo está fuera del radio definido sobre el grupo más próximo ( r’ > r ), por lo que se incorpora una nueva regla al mecanismo de inferencia | 
El nuevo grupo está dentro del radio definido sobre el grupo más próximo ( r’ < r ), no se incorpora nueva regla al mecanismo de inferencia |
El número de reglas que se genera depende de la distribución de las variables de entrada en el patrón de entrenamiento y del radio r definido. El radio r determina la complejidad del sistema borroso diseñado, mientras menor radio, mayor número de reglas (que identifica a los grupos) y complejidad del sistema. Un algoritmo desarrollado en Matlab se muestra a continuación % Clustering para datos que definen dos variables de entrada % Descripción: Genera el valor estimado para pares (x,y)
% Matriz de datos a identificar 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];
%############################################## % Definido por el usuario % Ancho de función de pertenencia gausiana ac=.3; % Radio r= 3; % Número máximo de clusters permitidos N_cmax=400; %##############################################
% Se define matriz de posibles clusters x0_l=zeros(N_cmax,1);
% Tamaño de la matriz de datos de entrada x ( en N_ite) [N_ite,m]=size(x);
% Se define la matriz Akl (ver ecuación anterior) Akl=zeros(N_cmax,1); % Se define la matriz Bkl (ver ecuación anterior) Bkl=zeros(N_cmax,1);
% Se define el primer cluster M=1; x0_l(1)=x(1); A(1)=y(1); B(1)=1;
%Matriz de datos de entrada que se repetirán x_l=zeros(N_cmax,1);
% Valores resultantes y_estc=zeros(N_ite,1);
for i=2:N_ite % Se busca distancia del dato a todos los clusters for l=1:M x_l(l)=x(i); end
% Se calcula menor distancia entre los cluster y su posición [c_dist,kl]=min(x_l(1:M)-x0_l(1:M));
if (c_dist > r) % Es necesario incorporar nuevo cluster M=M+1; x0_l(M)=x(i);
% Se dejan los restantes como están Akl(1:M)=Akl(1:M); Bkl(1:M)=Bkl(1:M);
% Se incorpora nuevo dato Akl(M)=y(i); Bkl(M)=1;
else % Se incorpora el dato al cluster respectivo % Se dejan los restantes como están Akl(1:M)=Akl(1:M); Bkl(1:M)=Bkl(1:M);
% Excepto el que se refuerza Akl(kl)=Akl(kl)+y(i); Bkl(kl)=Bkl(kl)+1;
end
% Se realiza la proyección dif=x_l-x0_l;
% Función de pertenencias M_f_l=exp(-dif.^2/ac^2);
% Numerador y denominador Num=sum(Akl(1:M)'*M_f_l(1:M)); Den=sum(Bkl(1:M)'*M_f_l(1:M));
% Resultado generado por el cluster y_estc(i)=Num/Den; end
% Se dibuja % Representa los clusters generados por % la identificación en x e y clus_x=x0_l(1:M); clus_y=Akl(1:M)./Bkl(1:M); plot(x,y,'p'); hold on; plot(clus_x,clus_y,'s'); |
Los grupos resultantes de su aplicación, para diferentes radios, se muestran en la siguiente figura 
Radio r=1.2, 11 reglas | 
Radio r= 0.3, 21 reglas |
Función de grupos próximos a un entorno en Matlab El Toolbox de fuzzy logic incorpora una función que realiza un algoritmo semejante al que se denomina subtractive clustering [2]:
[C] = SUBCLUST(X, RADII)
siendo C los centroides, X la matriz de datos de entrada y RADII (definido entre 0 y 1) es el radio que determina la incorporación del dato al cluster o la creación de uno nuevo.
Un ejemplo de aplicación se muestra en el siguiente programa % Matriz de datos 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]; X=[x,y];
% Se aplica el algoritmo [v]=subclust(X,.7);
% Dibuja figure plot(X(:,1),X(:,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 genfis2: Sistema de inferencia borroso Referencias: [1] Wang. L.X.: "Adaptive Fuzzy systems and Control". Prentice Hall. 1994.
[2] Yager, R.; Filev, D.: "Essentials of Fuzzy Modeling and Control". John Wiley & Sons. 1994. |