% APRENDIZAJE AUTOMÁTICO: UN ENFOQUE PRÁCTICO
% Autores: María Guijarro, P. Javier Herrera y Gonzalo Pajares
% Copyright RA-MA, 2010
% Capítulo 3: COMBINACIÓN DE CLASIFICADORES

function [DATOS_CLASES] = algoritmo_pseudoaleatorio()

global X X1;
global num_clases peso_exp1 crit_term1 max_iter1; % parámetros del algoritmo
global MI MA;

% los datos están todavía sin clasificar, por tanto los centros de
% las clases se inicializarán de forma aleatoria
vEstimados = zeros (1,3);  % no se usará realmente es sólo para concordancia de parámetros con
% la función posterior
DatosClasificados = false;
[v,U, distancia, iteraciones, Jcost] = fuzzy_clustering (X,num_clases,peso_exp1,crit_term1,vEstimados,DatosClasificados,max_iter1);

%desnormalización de v
v(:,:,:) = (repmat(MA,size(v,1),1) - repmat(MI,size(v,1),1)).*v + ...
    repmat(MI,size(v,1),1);

idx_clas = zeros(1,num_clases);
[mx,nx] = size(X1);
for hh=1:1:mx
    A = X1(hh,:);
    % calculo de los grados de pertenencia a cada una de las clases
    for i=1:1:num_clases
        dd(i) = (1/sum((A - v(i,:)).^2))^(2/(peso_exp1-1));
    end

    SUMA = sum(dd);
    for i=1:1:num_clases
        mu(i) = dd(i)/SUMA;
    end

    [fila, columna, valor] = find(mu == max(mu));

    idx_clas (columna) = idx_clas(columna) + 1;
    j = idx_clas (columna);
    DATOS_CLASES(columna).muestras(j,:) = A;
    DATOS_CLASES(columna).numero_muestras = j;
end