Grupos próximos a un entorno Presentación |
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 la mínima distancia entre el nuevo conjunto de datos y los grupos existentes.
[Paso 3].- Si la mínima distancia 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 definidos por múltiples entradas, % una salida % Genera un conjunto de reglas, basadas en identificación % 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]; % El formato de x es x(N,n) donde N número de muestras % El formato de y es y(N,1) %############################################## % Definido por el usuario % Ancho de función de pertenencia gausiana ac=.5; % Radio r= 3; % Número máximo de clusters permitidos N_cmax=400; %############################################## % Tamaño de la matriz de datos de entrada x (en N_ite) y número de % variables por muestra (n) [N_ite,n]=size(x); % Se define matriz de posibles clusters x0_l=zeros(N_cmax,n); % Condiciones iniciales de variables utilizadas Akl=zeros(N_cmax,1); Bkl=zeros(N_cmax,1); d=zeros(N_cmax,1); % Se define el primer cluster M=1; x0_l(1,:)=x(1,:); Akl(1,1)=y(1,1); Bkl(1,1)=1; % Valores resultantes y_estc=zeros(N_ite,1); for i=2:N_ite %Iteración sobre matriz de datos % Se busca la distancia del dato a todos los clusters for l=1:M d(l,1)=norm(x(i,:)-x0_l(l,:)) end % Se calcula la menor distancia entre los cluster y el nuevo dato [c_dist,kl]=min(d(1:M,1)); if (c_dist > r) % Es necesario incorporar nuevo cluster M=M+1; x0_l(M,:)=x(i,:); % Se incorpora nuevo dato Akl(M,1)=y(i,1); Bkl(M,1)=1; else % Se refuerza el cluster respectivo Akl(kl,1)=Akl(kl,1)+y(i,1); Bkl(kl,1)=Bkl(kl,1)+1; end % Se realiza la proyección for l=1:M expenl(l,1)=exp(sum((x(i,:)-x0_l(l,:))^2)/ac^2); end % Numerador y denominador Num=Akl(1:M,1)'*expenl(l,1); Den=Bkl(1:M,1)'*expenl(l,1); % Resultado generado por el cluster y_estc(i,1)=Num/Den; end % Se visualiza 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 A continuación se muestra un ejemplo de aplicación. 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. |