[model] = LearnMixtureofFullGaussianModels(k,NumbVar,Card,AuxPop,AuxFunVal,learning_params) LearnMixtureofFullGaussianModels: Learns a mixture of full multivariate Gaussian models using clustering INPUTS k: Current generation NumbVar: Number of variables Card: Vector with the range of values for all the variables. AuxPop: Population from which the model is learned AuxFunVal: Evaluation of the data set (required for some learning algorithms, not for this one) learning_params{1}(1) = what_to_cluster: Information used to cluster the solutions: 'vars': information about variables values, 'objs': objective values, 'vars_and_objs': objectives and variables are clustered together learning_params{1}(2) = how_to_cluster: Method used to cluster the solutions, currently: 'ClusterPointsAffinity' and 'ClusterPointsKmeans' learning_params{1}(3) = nclusters: Number of clusters learning_params{1}(4) = distance: Distance used for clustering (e.g. 'euclidean', 'correlation', 'cosine' ... See help pdist for full list of possible metrics) learning_params{1}(5) = normalization: Whether the values of the variables are normalized previous to clustering. This is done in order to avoid that some variables have more weights in the clustering.% OUTPUTS model: model{1,i} = mean of the variables for solutions in cluster i model{2,i} = covariance of the variables for solutions in cluster i model{3,i} = size(ind,1)/PopSize; % Coefficient of component i Last version 8/26/2008. Roberto Santana (roberto.santana@ehu.es)
0001 function [model] = LearnMixtureofFullGaussianModels(k,NumbVar,Card,AuxPop,AuxFunVal,learning_params) 0002 % [model] = LearnMixtureofFullGaussianModels(k,NumbVar,Card,AuxPop,AuxFunVal,learning_params) 0003 % LearnMixtureofFullGaussianModels: Learns a mixture of full 0004 % multivariate Gaussian models using clustering 0005 % INPUTS 0006 % k: Current generation 0007 % NumbVar: Number of variables 0008 % Card: Vector with the range of values for all the variables. 0009 % AuxPop: Population from which the model is learned 0010 % AuxFunVal: Evaluation of the data set (required for some learning algorithms, not for this one) 0011 % learning_params{1}(1) = what_to_cluster: Information used to cluster the 0012 % solutions: 'vars': information about variables values, 'objs': objective 0013 % values, 'vars_and_objs': objectives and variables are clustered together 0014 % learning_params{1}(2) = how_to_cluster: Method used to cluster the 0015 % solutions, currently: 'ClusterPointsAffinity' and 'ClusterPointsKmeans' 0016 % learning_params{1}(3) = nclusters: Number of clusters 0017 % learning_params{1}(4) = distance: Distance used for clustering (e.g. 0018 % 'euclidean', 'correlation', 'cosine' ... See help pdist for full list of 0019 % possible metrics) 0020 % learning_params{1}(5) = normalization: Whether the values of the variables 0021 % are normalized previous to clustering. This is done in order to avoid 0022 % that some variables have more weights in the clustering.% OUTPUTS 0023 % model: model{1,i} = mean of the variables for solutions in cluster i 0024 % model{2,i} = covariance of the variables for solutions in cluster i 0025 % model{3,i} = size(ind,1)/PopSize; % Coefficient of component i 0026 % 0027 % Last version 8/26/2008. Roberto Santana (roberto.santana@ehu.es) 0028 0029 what_to_cluster = char(cellstr(learning_params{1}(1))); 0030 how_to_cluster = char(cellstr(learning_params{1}(2))); 0031 nclusters = cell2num(learning_params{1}(3)); 0032 distance = char(cellstr(learning_params{1}(4))); 0033 normalization = cell2num(learning_params{1}(5)); 0034 0035 PopSize = size(AuxPop,1); 0036 0037 switch what_to_cluster 0038 case 'vars', NormPop = AuxPop; 0039 case 'objs', NormPop = AuxFunVal; 0040 case 'vars_and_objs', NormPop = [AuxPop,AuxFunVal]; 0041 end, 0042 0043 0044 if normalization==1 0045 for i=1:size(NormPop,2), 0046 NormPop(:,i) = normalize(NormPop(:,i)); % First values for all the variables are normalized 0047 end 0048 end 0049 0050 0051 [ind,nclusters] = eval([how_to_cluster,'(NormPop,distance,nclusters);']); 0052 0053 0054 for i=1:nclusters, 0055 idx = find(ind==i); 0056 nmembers = size(idx,1); 0057 if nmembers>1, 0058 model{1,i} = mean(AuxPop(idx,:)); % Vector of means for each cluster 0059 model{2,i} = cov(AuxPop(idx,:)); % Vector of covariances for each cluster 0060 model{3,i} = nmembers/PopSize; % Coefficient for the mixture, proportional to the number of points in the cluster 0061 else 0062 model{1,i} = mean(AuxPop); % Vector of means for each cluster 0063 model{2,i} = cov(AuxPop); % Vector of covariances for each cluster 0064 model{3,i} = nmembers/PopSize; % Coefficient for the mixture, proportional to the number of points in the cluster 0065 end 0066 end 0067 return; 0068 0069 0070