├── Examples ├── PCA.jpg ├── bdt.jpg ├── data.xls ├── tSNE.jpg ├── bdt_stats.jpg ├── superclass.jpg ├── data__qPCR01.pdf ├── gmm_analysis.jpg ├── gmm_clustering.jpg ├── data__PCA_superclass.txt ├── data__qPCR_analysis.csv ├── data__PCA.csv ├── data.csv └── projection__GMM_clustering_with_6_modes.csv ├── tSNE_analysis ├── Simple_tSNE │ ├── plot_tsne.m │ ├── tsne_d.m │ ├── tsne.m │ ├── d2p.m │ ├── x2p.m │ └── tsne_p.m └── tsne_analysis.m ├── GMM_analysis └── gmm_analysis.m ├── PCA_analysis └── pca_analysis.m ├── README.md └── BDT_analysis └── bdt_analysis.m /Examples/PCA.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/PCA.jpg -------------------------------------------------------------------------------- /Examples/bdt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/bdt.jpg -------------------------------------------------------------------------------- /Examples/data.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/data.xls -------------------------------------------------------------------------------- /Examples/tSNE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/tSNE.jpg -------------------------------------------------------------------------------- /Examples/bdt_stats.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/bdt_stats.jpg -------------------------------------------------------------------------------- /Examples/superclass.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/superclass.jpg -------------------------------------------------------------------------------- /Examples/data__qPCR01.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/data__qPCR01.pdf -------------------------------------------------------------------------------- /Examples/gmm_analysis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/gmm_analysis.jpg -------------------------------------------------------------------------------- /Examples/gmm_clustering.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mscastillo/FSE/HEAD/Examples/gmm_clustering.jpg -------------------------------------------------------------------------------- /Examples/data__PCA_superclass.txt: -------------------------------------------------------------------------------- 1 | cell001 2 | cell002 3 | cell003 4 | cell004 5 | cell005 6 | cell006 7 | cell007 8 | cell008 9 | cell009 10 | cell010 11 | cell011 12 | cell012 13 | cell013 14 | cell014 15 | cell015 16 | cell016 17 | cell017 18 | cell018 19 | cell019 20 | cell020 21 | -------------------------------------------------------------------------------- /Examples/data__qPCR_analysis.csv: -------------------------------------------------------------------------------- 1 | gene,mean_1±std_1,mean_2±std_2,mean_3±std_3,mean_4±std_4,mean_5±std_5 2 | VARIABLES01,5.4194±0.27737,3.45±0.9998 3 | VARIABLES02,5.2165±0.56183,2.5652±0.27821,3.5754±0.49421 4 | VARIABLES03,5.5756±0.57712,3.3788±0.78377 5 | VARIABLES04,4.1249±1.0151,6.2596±0.37446 6 | VARIABLES05,4.6924±1.2168 7 | VARIABLES06,3.5352±0.59276,6.7288±0.17502,5.4215±0.69533 8 | VARIABLES07,6.2439±0.6771,7.7232±0.14742,4.3326±0.65296 9 | VARIABLES08,6.0354±0.59217,7.9309±0.50423,4.188±0.11139 10 | VARIABLES09,7.8941±1.1662 11 | -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/plot_tsne.m: -------------------------------------------------------------------------------- 1 | 2 | %clear all ; close all ; clc 3 | 4 | cd C:\Users\Manuel\Desktop\ana 5 | load Simple_tSNE\results ; 6 | 7 | % PLOTTING PARAMETERS % % % % % % % % % % % % % % % % % % % % % % % % % % % 8 | marker = {'r+' 'go' 'b*' 'cx' 'ms' 'yd' 'kv'} ; 9 | text = {} ; 10 | % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 11 | 12 | %[pc,score,latent,tsquare] = princomp(data') ; Y = pc(:,1:size(Y,2)) ; [cumsum(latent)./sum(latent)] ; disp( ['The two first component have the ',num2str(ans(size(Y,2))*100),'% of the information within the original data. '] ) 13 | 14 | tags_list = unique( sort(tags(:)) )' ; 15 | 16 | figure(1) ; 17 | hold on ; 18 | 19 | for k = tags_list 20 | 21 | index = [tags == k] ; 22 | if ( size(Y,2) > 3 ) 23 | disp( 'Unable to plot more than 3 dimensions.' ) 24 | else 25 | if ( size(Y,2) > 2 ) 26 | plot3( Y(index,1),Y(index,2),Y(index,3),marker{k} ) ; 27 | view(45,30) ; 28 | grid on ; 29 | else 30 | plot( Y(index,1),Y(index,2),marker{k} ) ; 31 | end%if 32 | end%if 33 | text = [ text ; unique(classes(index)) ] ; 34 | 35 | end%for 36 | 37 | xlim([(min(Y(:,1))),(max(Y(:,1)))]) ; 38 | ylim([(min(Y(:,2))),(max(Y(:,2)))]) ; 39 | 40 | hold off ; 41 | legend( text,'EdgeColor',[1 1 1],'Location','SE' ) ; -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/tsne_d.m: -------------------------------------------------------------------------------- 1 | function ydata = tsne_d(D, labels, no_dims, perplexity) 2 | %TSNE_D Performs symmetric t-SNE on the pairwise Euclidean distance matrix D 3 | % 4 | % mappedX = tsne_d(D, labels, no_dims, perplexity) 5 | % mappedX = tsne_d(D, labels, initial_solution, perplexity) 6 | % 7 | % The function performs symmetric t-SNE on the NxN pairwise Euclidean 8 | % distance matrix D to construct an embedding with no_dims dimensions 9 | % (default = 2). An initial solution obtained from an other dimensionality 10 | % reduction technique may be specified in initial_solution. 11 | % The perplexity of the Gaussian kernel that is employed can be specified 12 | % through perplexity (default = 30). The labels of the data are not used 13 | % by t-SNE itself, however, they are used to color intermediate plots. 14 | % Please provide an empty labels matrix [] if you don't want to plot 15 | % results during the optimization. 16 | % The data embedding is returned in mappedX. 17 | % 18 | % 19 | % (C) Laurens van der Maaten, 2010 20 | % University of California, San Diego 21 | 22 | 23 | if ~exist('labels', 'var') 24 | labels = []; 25 | end 26 | if ~exist('no_dims', 'var') || isempty(no_dims) 27 | no_dims = 2; 28 | end 29 | if ~exist('perplexity', 'var') || isempty(perplexity) 30 | perplexity = 30; 31 | end 32 | 33 | % First check whether we already have an initial solution 34 | if numel(no_dims) > 1 35 | initial_solution = true; 36 | ydata = no_dims; 37 | no_dims = size(ydata, 2); 38 | else 39 | initial_solution = false; 40 | end 41 | 42 | % Compute joint probabilities 43 | D = D / max(D(:)); % normalize distances 44 | P = d2p(D .^ 2, perplexity, 1e-5); % compute affinities using fixed perplexity 45 | 46 | % Run t-SNE 47 | if initial_solution 48 | ydata = tsne_p(P, labels, ydata); 49 | else 50 | ydata = tsne_p(P, labels, no_dims); 51 | end 52 | -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/tsne.m: -------------------------------------------------------------------------------- 1 | function ydata = tsne(X, labels, no_dims, initial_dims, perplexity) 2 | %TSNE Performs symmetric t-SNE on dataset X 3 | % 4 | % mappedX = tsne(X, labels, no_dims, initial_dims, perplexity) 5 | % mappedX = tsne(X, labels, initial_solution, perplexity) 6 | % 7 | % The function performs symmetric t-SNE on the NxD dataset X to reduce its 8 | % dimensionality to no_dims dimensions (default = 2). The data is 9 | % preprocessed using PCA, reducing the dimensionality to initial_dims 10 | % dimensions (default = 30). Alternatively, an initial solution obtained 11 | % from an other dimensionality reduction technique may be specified in 12 | % initial_solution. The perplexity of the Gaussian kernel that is employed 13 | % can be specified through perplexity (default = 30). The labels of the 14 | % data are not used by t-SNE itself, however, they are used to color 15 | % intermediate plots. Please provide an empty labels matrix [] if you 16 | % don't want to plot results during the optimization. 17 | % The low-dimensional data representation is returned in mappedX. 18 | % 19 | % 20 | % (C) Laurens van der Maaten, 2010 21 | % University of California, San Diego 22 | 23 | 24 | if ~exist('labels', 'var') 25 | labels = []; 26 | end 27 | if ~exist('no_dims', 'var') || isempty(no_dims) 28 | no_dims = 2; 29 | end 30 | if ~exist('initial_dims', 'var') || isempty(initial_dims) 31 | initial_dims = min(50, size(X, 2)); 32 | end 33 | if ~exist('perplexity', 'var') || isempty(perplexity) 34 | perplexity = 30; 35 | end 36 | 37 | % First check whether we already have an initial solution 38 | if numel(no_dims) > 1 39 | initial_solution = true; 40 | ydata = no_dims; 41 | no_dims = size(ydata, 2); 42 | perplexity = initial_dims; 43 | else 44 | initial_solution = false; 45 | end 46 | 47 | % Normalize input data 48 | X = X - min(X(:)); 49 | X = X / max(X(:)); 50 | X = bsxfun(@minus, X, mean(X, 1)); 51 | 52 | % Perform preprocessing using PCA 53 | if ~initial_solution 54 | disp('Preprocessing data using PCA...'); 55 | if size(X, 2) < size(X, 1) 56 | C = X' * X; 57 | else 58 | C = (1 / size(X, 1)) * (X * X'); 59 | end 60 | [M, lambda] = eig(C); 61 | [lambda, ind] = sort(diag(lambda), 'descend'); 62 | M = M(:,ind(1:initial_dims)); 63 | lambda = lambda(1:initial_dims); 64 | if ~(size(X, 2) < size(X, 1)) 65 | M = bsxfun(@times, X' * M, (1 ./ sqrt(size(X, 1) .* lambda))'); 66 | end 67 | X = bsxfun(@minus, X, mean(X, 1)) * M; 68 | clear M lambda ind 69 | end 70 | 71 | % Compute pairwise distance matrix 72 | sum_X = sum(X .^ 2, 2); 73 | D = bsxfun(@plus, sum_X, bsxfun(@plus, sum_X', -2 * (X * X'))); 74 | 75 | % Compute joint probabilities 76 | P = d2p(D, perplexity, 1e-5); % compute affinities using fixed perplexity 77 | clear D 78 | 79 | % Run t-SNE 80 | if initial_solution 81 | ydata = tsne_p(P, labels, ydata); 82 | else 83 | ydata = tsne_p(P, labels, no_dims); 84 | end 85 | -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/d2p.m: -------------------------------------------------------------------------------- 1 | function [P, beta] = d2p(D, u, tol) 2 | %D2P Identifies appropriate sigma's to get kk NNs up to some tolerance 3 | % 4 | % [P, beta] = d2p(D, kk, tol) 5 | % 6 | % Identifies the required precision (= 1 / variance^2) to obtain a Gaussian 7 | % kernel with a certain uncertainty for every datapoint. The desired 8 | % uncertainty can be specified through the perplexity u (default = 15). The 9 | % desired perplexity is obtained up to some tolerance that can be specified 10 | % by tol (default = 1e-4). 11 | % The function returns the final Gaussian kernel in P, as well as the 12 | % employed precisions per instance in beta. 13 | % 14 | % 15 | % (C) Laurens van der Maaten, 2008 16 | % Maastricht University 17 | 18 | 19 | if ~exist('u', 'var') || isempty(u) 20 | u = 15; 21 | end 22 | if ~exist('tol', 'var') || isempty(tol) 23 | tol = 1e-4; 24 | end 25 | 26 | % Initialize some variables 27 | n = size(D, 1); % number of instances 28 | P = zeros(n, n); % empty probability matrix 29 | beta = ones(n, 1); % empty precision vector 30 | logU = log(u); % log of perplexity (= entropy) 31 | 32 | % Run over all datapoints 33 | for i=1:n 34 | 35 | if ~rem(i, 500) 36 | disp(['Computed P-values ' num2str(i) ' of ' num2str(n) ' datapoints...']); 37 | end 38 | 39 | % Set minimum and maximum values for precision 40 | betamin = -Inf; 41 | betamax = Inf; 42 | 43 | % Compute the Gaussian kernel and entropy for the current precision 44 | [H, thisP] = Hbeta(D(i, [1:i - 1, i + 1:end]), beta(i)); 45 | 46 | % Evaluate whether the perplexity is within tolerance 47 | Hdiff = H - logU; 48 | tries = 0; 49 | while abs(Hdiff) > tol && tries < 50 50 | 51 | % If not, increase or decrease precision 52 | if Hdiff > 0 53 | betamin = beta(i); 54 | if isinf(betamax) 55 | beta(i) = beta(i) * 2; 56 | else 57 | beta(i) = (beta(i) + betamax) / 2; 58 | end 59 | else 60 | betamax = beta(i); 61 | if isinf(betamin) 62 | beta(i) = beta(i) / 2; 63 | else 64 | beta(i) = (beta(i) + betamin) / 2; 65 | end 66 | end 67 | 68 | % Recompute the values 69 | [H, thisP] = Hbeta(D(i, [1:i - 1, i + 1:end]), beta(i)); 70 | Hdiff = H - logU; 71 | tries = tries + 1; 72 | end 73 | 74 | % Set the final row of P 75 | P(i, [1:i - 1, i + 1:end]) = thisP; 76 | end 77 | disp(['Mean value of sigma: ' num2str(mean(sqrt(1 ./ beta)))]); 78 | disp(['Minimum value of sigma: ' num2str(min(sqrt(1 ./ beta)))]); 79 | disp(['Maximum value of sigma: ' num2str(max(sqrt(1 ./ beta)))]); 80 | end 81 | 82 | 83 | 84 | % Function that computes the Gaussian kernel values given a vector of 85 | % squared Euclidean distances, and the precision of the Gaussian kernel. 86 | % The function also computes the perplexity of the distribution. 87 | function [H, P] = Hbeta(D, beta) 88 | P = exp(-D * beta); 89 | sumP = sum(P); 90 | H = log(sumP) + beta * sum(D .* P) / sumP; 91 | % why not: H = exp(-sum(P(P > 1e-5) .* log(P(P > 1e-5)))); ??? 92 | P = P / sumP; 93 | end 94 | 95 | -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/x2p.m: -------------------------------------------------------------------------------- 1 | function [P, beta] = x2p(X, u, tol) 2 | %X2P Identifies appropriate sigma's to get kk NNs up to some tolerance 3 | % 4 | % [P, beta] = x2p(xx, kk, tol) 5 | % 6 | % Identifies the required precision (= 1 / variance^2) to obtain a Gaussian 7 | % kernel with a certain uncertainty for every datapoint. The desired 8 | % uncertainty can be specified through the perplexity u (default = 15). The 9 | % desired perplexity is obtained up to some tolerance that can be specified 10 | % by tol (default = 1e-4). 11 | % The function returns the final Gaussian kernel in P, as well as the 12 | % employed precisions per instance in beta. 13 | % 14 | % 15 | % (C) Laurens van der Maaten, 2008 16 | % Maastricht University 17 | 18 | 19 | if ~exist('u', 'var') || isempty(u) 20 | u = 15; 21 | end 22 | if ~exist('tol', 'var') || isempty(tol) 23 | tol = 1e-4; 24 | end 25 | 26 | % Initialize some variables 27 | n = size(X, 1); % number of instances 28 | P = zeros(n, n); % empty probability matrix 29 | beta = ones(n, 1); % empty precision vector 30 | logU = log(u); % log of perplexity (= entropy) 31 | 32 | % Compute pairwise distances 33 | disp('Computing pairwise distances...'); 34 | sum_X = sum(X .^ 2, 2); 35 | D = bsxfun(@plus, sum_X, bsxfun(@plus, sum_X', -2 * X * X')); 36 | 37 | % Run over all datapoints 38 | disp('Computing P-values...'); 39 | for i=1:n 40 | 41 | if ~rem(i, 500) 42 | disp(['Computed P-values ' num2str(i) ' of ' num2str(n) ' datapoints...']); 43 | end 44 | 45 | % Set minimum and maximum values for precision 46 | betamin = -Inf; 47 | betamax = Inf; 48 | 49 | % Compute the Gaussian kernel and entropy for the current precision 50 | Di = D(i, [1:i-1 i+1:end]); 51 | [H, thisP] = Hbeta(Di, beta(i)); 52 | 53 | % Evaluate whether the perplexity is within tolerance 54 | Hdiff = H - logU; 55 | tries = 0; 56 | while abs(Hdiff) > tol && tries < 50 57 | 58 | % If not, increase or decrease precision 59 | if Hdiff > 0 60 | betamin = beta(i); 61 | if isinf(betamax) 62 | beta(i) = beta(i) * 2; 63 | else 64 | beta(i) = (beta(i) + betamax) / 2; 65 | end 66 | else 67 | betamax = beta(i); 68 | if isinf(betamin) 69 | beta(i) = beta(i) / 2; 70 | else 71 | beta(i) = (beta(i) + betamin) / 2; 72 | end 73 | end 74 | 75 | % Recompute the values 76 | [H, thisP] = Hbeta(Di, beta(i)); 77 | Hdiff = H - logU; 78 | tries = tries + 1; 79 | end 80 | 81 | % Set the final row of P 82 | P(i, [1:i - 1, i + 1:end]) = thisP; 83 | end 84 | disp(['Mean value of sigma: ' num2str(mean(sqrt(1 ./ beta)))]); 85 | disp(['Minimum value of sigma: ' num2str(min(sqrt(1 ./ beta)))]); 86 | disp(['Maximum value of sigma: ' num2str(max(sqrt(1 ./ beta)))]); 87 | end 88 | 89 | 90 | 91 | % Function that computes the Gaussian kernel values given a vector of 92 | % squared Euclidean distances, and the precision of the Gaussian kernel. 93 | % The function also computes the perplexity of the distribution. 94 | function [H, P] = Hbeta(D, beta) 95 | P = exp(-D * beta); 96 | sumP = sum(P); 97 | H = log(sumP) + beta * sum(D .* P) / sumP; 98 | P = P / sumP; 99 | end 100 | 101 | -------------------------------------------------------------------------------- /Examples/data__PCA.csv: -------------------------------------------------------------------------------- 1 | cell001,class01,3.615055,1.783111,-1.636734 2 | cell002,class01,3.544618,1.410878,-1.684024 3 | cell003,class01,3.995385,1.875497,-2.197187 4 | cell004,class01,3.743780,1.816311,-2.086427 5 | cell005,class01,3.264292,1.986181,-1.617097 6 | cell006,class01,3.808432,1.881508,-1.871637 7 | cell007,class01,3.706894,1.735622,-1.585898 8 | cell008,class01,3.709308,2.098582,-1.242259 9 | cell009,class01,3.799559,1.413537,-1.618126 10 | cell010,class01,3.741968,1.546774,-1.421439 11 | cell011,class01,3.154591,1.643779,-1.910876 12 | cell012,class01,3.579079,2.088118,-1.765211 13 | cell013,class01,3.949614,1.826919,-1.531362 14 | cell014,class01,3.476063,1.532821,-1.988959 15 | cell015,class01,3.783241,1.679046,-1.553756 16 | cell016,class01,3.939355,1.824980,-1.400386 17 | cell017,class01,3.640114,1.950773,-1.711594 18 | cell018,class01,3.806984,2.183379,-1.511890 19 | cell019,class01,3.453007,1.770239,-1.647088 20 | cell020,class01,4.039779,1.914289,-2.193231 21 | cell021,class02,1.046891,-0.199936,-2.157268 22 | cell022,class02,0.999238,-0.282747,-2.338092 23 | cell023,class02,1.344589,-0.849325,-2.464693 24 | cell024,class02,1.317824,-0.560775,-2.838807 25 | cell025,class02,1.548636,-1.041264,-2.841732 26 | cell026,class02,1.425651,-1.037827,-2.479609 27 | cell027,class02,1.200020,-0.825405,-2.657362 28 | cell028,class02,0.800811,-0.525089,-2.763614 29 | cell029,class02,1.034850,-1.123352,-2.966832 30 | cell030,class02,1.120042,-0.431982,-2.886030 31 | cell031,class02,1.744377,-0.476741,-2.879699 32 | cell032,class02,1.340443,-0.588395,-2.141603 33 | cell033,class02,1.468352,-0.934246,-2.188890 34 | cell034,class02,1.321331,-0.476346,-2.180131 35 | cell035,class02,1.045503,0.035962,-2.285247 36 | cell036,class02,0.495900,-0.423363,-2.330773 37 | cell037,class02,1.202966,-0.962714,-2.521734 38 | cell038,class02,1.205001,-0.359670,-2.155912 39 | cell039,class02,0.456277,-0.222491,-2.514237 40 | cell040,class02,1.272344,-1.074348,-2.057146 41 | cell041,class03,-0.411330,-2.317623,0.057296 42 | cell042,class03,0.295860,-1.880734,-0.212138 43 | cell043,class03,-0.149410,-2.013842,-0.423411 44 | cell044,class03,-0.522567,-2.361408,-0.397803 45 | cell045,class03,-0.361429,-2.731166,0.324725 46 | cell046,class03,0.569302,-1.899435,-0.939383 47 | cell047,class03,0.284901,-2.203255,-0.319770 48 | cell048,class03,0.072047,-1.228089,0.639271 49 | cell049,class03,0.551976,-1.950546,0.244008 50 | cell050,class03,0.680160,-1.327975,-0.072937 51 | cell051,class03,0.393856,-2.740599,-0.559852 52 | cell052,class03,0.288486,-2.092772,-0.406514 53 | cell053,class03,-0.732599,-2.416693,0.191241 54 | cell054,class03,0.218753,-2.194192,0.051403 55 | cell055,class03,0.536013,-2.559520,0.549218 56 | cell056,class03,0.325638,-2.023541,-1.424454 57 | cell057,class03,-0.381107,-2.445410,0.405783 58 | cell058,class03,-0.333994,-3.012986,0.120050 59 | cell059,class03,-1.310033,-2.114872,-0.888035 60 | cell060,class03,0.256849,-1.853619,0.795855 61 | cell061,class04,-1.061448,0.032350,2.887959 62 | cell062,class04,-0.847408,-1.287816,2.295938 63 | cell063,class04,-0.890914,-0.232277,3.600157 64 | cell064,class04,-0.929052,-0.056970,3.029438 65 | cell065,class04,-0.277569,-0.810420,3.260348 66 | cell066,class04,-0.607410,-1.592668,2.996039 67 | cell067,class04,-1.060100,-0.248884,2.910305 68 | cell068,class04,-0.737803,0.281551,2.950181 69 | cell069,class04,-0.859095,-0.113021,3.524454 70 | cell070,class04,-0.492187,-0.422140,2.840615 71 | cell071,class04,0.698844,-0.346418,2.601505 72 | cell072,class04,-1.372639,-0.774297,2.854046 73 | cell073,class04,-0.750570,-0.880954,3.884664 74 | cell074,class04,-0.226720,-0.466334,2.347202 75 | cell075,class04,-0.348583,-0.500016,2.434276 76 | cell076,class04,-1.061571,0.287593,3.241242 77 | cell077,class04,-1.214982,-1.005682,3.080856 78 | cell078,class04,-1.594467,-0.668168,2.748884 79 | cell079,class04,-1.600969,-0.713450,2.678053 80 | cell080,class05,-0.880087,-1.343812,3.352922 81 | cell081,class05,-4.148395,0.552034,1.741265 82 | cell082,class05,-3.115418,1.985389,2.142172 83 | cell083,class05,-3.288221,0.879307,0.766595 84 | cell084,class05,-3.930088,1.428211,0.248819 85 | cell085,class05,-3.863059,1.413778,1.582274 86 | cell086,class05,-4.048585,1.466767,1.052922 87 | cell087,class05,-4.590470,2.466000,0.941222 88 | cell088,class05,-4.354733,0.677132,1.769822 89 | cell089,class05,-4.138368,1.684179,0.853715 90 | cell090,class05,-4.514923,1.649205,0.632489 91 | cell091,class05,-5.024761,1.300465,0.429330 92 | cell092,class05,-4.074843,1.998363,0.421060 93 | cell093,class05,-3.567693,1.363791,1.959825 94 | cell094,class05,-3.526403,1.244804,2.153540 95 | cell095,class05,-4.302191,2.191630,1.376521 96 | cell096,class05,-4.169683,1.738134,1.267661 97 | cell097,class05,-4.131323,1.997695,2.267019 98 | cell098,class05,-4.237667,1.847579,1.982545 99 | cell099,class05,-5.044813,1.737732,1.997139 100 | cell100,class05,-3.227170,1.005631,0.985019 101 | -------------------------------------------------------------------------------- /tSNE_analysis/Simple_tSNE/tsne_p.m: -------------------------------------------------------------------------------- 1 | function ydata = tsne_p(P, labels, no_dims) 2 | %TSNE_P Performs symmetric t-SNE on affinity matrix P 3 | % 4 | % mappedX = tsne_p(P, labels, no_dims) 5 | % 6 | % The function performs symmetric t-SNE on pairwise similarity matrix P 7 | % to create a low-dimensional map of no_dims dimensions (default = 2). 8 | % The matrix P is assumed to be symmetric, sum up to 1, and have zeros 9 | % on the diagonal. 10 | % The labels of the data are not used by t-SNE itself, however, they 11 | % are used to color intermediate plots. Please provide an empty labels 12 | % matrix [] if you don't want to plot results during the optimization. 13 | % The low-dimensional data representation is returned in mappedX. 14 | % 15 | % 16 | % (C) Laurens van der Maaten, 2010 17 | % University of California, San Diego 18 | 19 | 20 | if ~exist('labels', 'var') 21 | labels = []; 22 | end 23 | if ~exist('no_dims', 'var') || isempty(no_dims) 24 | no_dims = 2; 25 | end 26 | 27 | % First check whether we already have an initial solution 28 | if numel(no_dims) > 1 29 | initial_solution = true; 30 | ydata = no_dims; 31 | no_dims = size(ydata, 2); 32 | else 33 | initial_solution = false; 34 | end 35 | 36 | % Initialize some variables 37 | n = size(P, 1); % number of instances 38 | momentum = 0.5; % initial momentum 39 | final_momentum = 0.8; % value to which momentum is changed 40 | mom_switch_iter = 250; % iteration at which momentum is changed 41 | stop_lying_iter = 100; % iteration at which lying about P-values is stopped 42 | max_iter = 1000; % maximum number of iterations 43 | epsilon = 500; % initial learning rate 44 | min_gain = .01; % minimum gain for delta-bar-delta 45 | 46 | % Make sure P-vals are set properly 47 | P(1:n + 1:end) = 0; % set diagonal to zero 48 | P = 0.5 * (P + P'); % symmetrize P-values 49 | P = max(P ./ sum(P(:)), realmin); % make sure P-values sum to one 50 | const = sum(P(:) .* log(P(:))); % constant in KL divergence 51 | if ~initial_solution 52 | P = P * 4; % lie about the P-vals to find better local minima 53 | end 54 | 55 | % Initialize the solution 56 | if ~initial_solution 57 | ydata = .0001 * randn(n, no_dims); 58 | end 59 | y_incs = zeros(size(ydata)); 60 | gains = ones(size(ydata)); 61 | 62 | % Run the iterations 63 | for iter=1:max_iter 64 | 65 | % Compute joint probability that point i and j are neighbors 66 | sum_ydata = sum(ydata .^ 2, 2); 67 | num = 1 ./ (1 + bsxfun(@plus, sum_ydata, bsxfun(@plus, sum_ydata', -2 * (ydata * ydata')))); % Student-t distribution 68 | num(1:n+1:end) = 0; % set diagonal to zero 69 | Q = max(num ./ sum(num(:)), realmin); % normalize to get probabilities 70 | 71 | % Compute the gradients (faster implementation) 72 | L = (P - Q) .* num; 73 | y_grads = 4 * (diag(sum(L, 1)) - L) * ydata; 74 | 75 | % Update the solution 76 | gains = (gains + .2) .* (sign(y_grads) ~= sign(y_incs)) ... % note that the y_grads are actually -y_grads 77 | + (gains * .8) .* (sign(y_grads) == sign(y_incs)); 78 | gains(gains < min_gain) = min_gain; 79 | y_incs = momentum * y_incs - epsilon * (gains .* y_grads); 80 | ydata = ydata + y_incs; 81 | ydata = bsxfun(@minus, ydata, mean(ydata, 1)); 82 | 83 | % Update the momentum if necessary 84 | if iter == mom_switch_iter 85 | momentum = final_momentum; 86 | end 87 | if iter == stop_lying_iter && ~initial_solution 88 | P = P ./ 4; 89 | end 90 | 91 | % Print out progress 92 | if ~rem(iter, 10) 93 | cost = const - sum(P(:) .* log(Q(:))); 94 | disp(['Iteration ' num2str(iter) ': error is ' num2str(cost)]); 95 | end 96 | 97 | % Display scatter plot (maximally first three dimensions) 98 | if ~rem(iter, 10) && ~isempty(labels) 99 | if no_dims == 1 100 | scatter(ydata, ydata, 9, labels, 'filled'); 101 | elseif no_dims == 2 102 | scatter(ydata(:,1), ydata(:,2), 9, labels, 'filled'); 103 | else 104 | scatter3(ydata(:,1), ydata(:,2), ydata(:,3), 40, labels, 'filled'); 105 | end 106 | axis tight 107 | axis off 108 | drawnow 109 | end 110 | end 111 | -------------------------------------------------------------------------------- /GMM_analysis/gmm_analysis.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | function [] = gmm_analysis() 4 | 5 | 6 | %% Workspace initialization 7 | % The workspace is cleaned and some parameters and deffined 8 | clear all ; % this removes all variables stored in your current workspace 9 | 10 | % PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11 | % 12 | % The next parameters are choosen to produce an optimal solution. I would 13 | % recommend not to modify them, but they could be changed by the user to 14 | % produce different scnearios. 15 | % 16 | % (1) This parameter is the seed of the random-number generator. By 17 | % fixing it, we have controlled the randomness of the results and we 18 | % could reproduce it at any moment. The seed could have any integer 19 | % value, but I would recommend to reset it always by ussing zero. 20 | % For example: 21 | % seed = 0 ; 22 | seed = 0 ; 23 | % 24 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25 | 26 | import bioma.data.* % loads the DataMatrix class 27 | close all force ; % this closes all plotted figures 28 | clc ; % this clears the command window log 29 | rng(seed) ; % random seed is set here 30 | 31 | disp( ['================================'] ) ; 32 | disp( ['= Multimodal Gaussian analysis ='] ) ; 33 | disp( ['================================'] ) ; disp( char(10) ) ; 34 | 35 | 36 | %% Loading and examinating the data 37 | % Data are read from an Excel or CSV file (genes at columns and samples at rows) 38 | % which must have the next structure: 39 | % - First column: the name of the class (cell-type, treatment, stage, etc) 40 | % - Second column: the name of the sample 41 | % - First row: a header with the name of the genes at each column. Notice 42 | % that the first two fields of the header corresponds to the sample's 43 | % class and samples's name. 44 | disp( [' - Loading data...'] ) ; disp( char(10) ) ; 45 | [ input_file,input_path ] = uigetfile( {'*.csv','Comma Sparated Values (*.csv)';'*.xls','Excel 97-2003 (*.xls)';'*.xlsx','Excel 2010 (*.xlsx)'},'MultiSelect','off' ) ; 46 | [ vector ] = strsplit( input_file,'.' ) ; 47 | file_name = vector(1) ; 48 | extension = vector(2) ; 49 | if ( strcmp(extension,'csv') ) 50 | T = readtable( [input_path,input_file],'Delimiter',',','ReadVariableNames',false ) ; 51 | classes_names = T{2:end,1} ; 52 | samples = T{2:end,2} ; 53 | if ( sum(isnan(str2double(T{1,end}))) > 0 ) 54 | genes = T{1,3:end-1} ; 55 | data = str2double(T{2:end,3:end-1}) ; 56 | else 57 | genes = T{1,3:end} ; 58 | data = str2double(T{2:end,3:end}) ; 59 | end%if 60 | clear T ; 61 | else 62 | if ( strcmp(extension,'xls') || strcmp(extension,'xlsx') ) 63 | [ data,txt ] = xlsread( [input_path,input_file] ) ; 64 | classes_names = txt(2:end,1) ; 65 | samples = txt(2:end,2) ; 66 | genes = txt(1,3:end) ; 67 | clear txt ; 68 | else 69 | disp(' file-format error.') 70 | return ; 71 | end%if 72 | end%if 73 | whos('data','samples','classes_names','genes') ; 74 | % "data" is the matrix containing the normalized expression profiles from 75 | % single-cell qPCR data, with genes as columns and samples as rows. The 76 | % name of the genes at each column are in "genes", a row-vector. 77 | % Similarly, the name of each sample at each row of the "data" matrix are 78 | % stored in "cell_names", a column-vector. The names on these vectors must 79 | % be unique. The name of the classes at each row are stored in 80 | % "classes_names". This column vector has non-unique classes names. 81 | N = size(data,1) ; 82 | G = size(data,2) ; 83 | classes_unique = unique( sort(classes_names) ) ; 84 | C = size(classes_unique(:),1) ; 85 | classes_keys = zeros(N,1) ; 86 | classes_matrix = zeros(N,N) ; 87 | dm = DataMatrix(data,classes_names,genes) ; 88 | 89 | 90 | %% Initializing output file 91 | output_file = strjoin([input_path,file_name,'__qPCR_analysis.csv'],'') ; 92 | text_to_file = ['gene'] ; 93 | for c = 1:C 94 | text_to_file = [text_to_file,[',','mean_',num2str(c),char(177),'std_',num2str(c)]] ; 95 | end%for 96 | fileID = fopen(output_file,'w') ; 97 | fprintf(fileID,[text_to_file,char(10)]) ; 98 | fclose(fileID) ; 99 | 100 | 101 | %% Computing histograms 102 | [ X Y ] = histogram( data,min(data(:)),max(data(:)),0.1 ) ; Y = Y/N ; 103 | for g = 1:G 104 | colors = hsv( C ) ; colors = hsv2rgb( rgb2hsv(colors).*[ones(C,1) 0.5*ones(C,1) ones(C,1)] ) ; 105 | figure( ceil(g/9) ) ; 106 | subplot(3,3,mod(g-1,9)+1) ; title( genes(g) ) ; grid on 107 | hold on ; 108 | h = [] ; legend_text = [] ; 109 | [ x y ] = histogram( data(:,g),min(data(:)),max(data(:)),0.1 ) ; y = y/N ; 110 | plot( x,abs(smooth(x,y)),'k--','LineWidth',1.2) ; 111 | % plotting individual histograms for each class ========================= 112 | for c = 1:C 113 | [ x y ] = histogram( data(strcmp(classes_names,classes_unique(c)),g),min(data(:)),max(data(:)),0.1 ) ; y = y/N ; 114 | h(c) = plot( x,abs(smooth(x,y)),'-','Color',colors(c,:),'LineWidth',0.6 ) ; 115 | legend_text = [ legend_text ; classes_unique(c) ] ; 116 | drawnow ; 117 | end%for 118 | % computing the number of Gaussian modes ================================ 119 | options = statset('Display','off','MaxIter',50) ; 120 | disp( strjoin([' - Computing Gaussiam mixture model for',genes(g),'...']) ) ; 121 | for c = 1:5 122 | warning off ; 123 | models{c} = gmdistribution.fit( data(:,g),c,'Replicates',100,'Regularize',eps,'Options',options ) ; 124 | %models{c} = gmdistribution.fit( data(data(:,g)>0.9*max(data(:))==0,g),c,'Replicates',100,'Regularize',eps,'Options',options ) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%% 125 | AIC(c) = models{c}.AIC ; 126 | warning on ; 127 | end%for 128 | [ vals nodes ] = min( AIC ) ; 129 | colors = hsv( nodes ) ; 130 | text_to_file = [genes(g)] ; 131 | for k = 1:nodes 132 | mu = models{nodes}.mu(k) ; 133 | s2 = models{nodes}.Sigma(k) ; 134 | text_to_file = [text_to_file,[num2str(mu),char(177),num2str(sqrt(s2))]] ; 135 | x = X ; 136 | y = max( [ smooth( Y( (X(:)>=mu-sqrt(s2)).*(X(:)<= mu+sqrt(s2))==1,g ) ) ; 0 ] ).*exp(-0.5*(x-mu).^2/s2)/sqrt(2*pi*s2) ; 137 | plot( x,y,'-','Color',colors(k,:),'LineWidth',1.2 ) ; 138 | plot(mu,0,'^','Color',colors(k,:),'MarkerFaceColor',colors(k,:),'LineStyle','none','MarkerSize',5) ; 139 | drawnow ; 140 | end%for 141 | if mod(g-1,9) == 0 ; legend( h(:),legend_text,'EdgeColor',[1 1 1],'Location','NE' ) ; legend(gca,'boxoff') ; end%if 142 | xlim( [min(data(:)) max(data(:))] ) ; 143 | ylim( [0 min([1 1.1*max(smooth(Y(:,g)))])] ) ; 144 | hold off ; 145 | % saving results ======================================================== 146 | fileID = fopen(output_file,'a') ; 147 | fprintf(fileID,[strjoin(text_to_file,','),char(10)]) ; 148 | fclose(fileID) ; 149 | set( gcf,'PaperPosition',[-0.5 -0.25 30+[1 0.5]] ) ; 150 | set( gcf,'PaperSize',[0 0]+30) ; 151 | saveas( gcf,strjoin([input_path,file_name,'__qPCR0',num2str(ceil(g/9))],''),'pdf' ) ; 152 | end%for 153 | 154 | end%function 155 | 156 | function [ x,y ] = histogram( data,x_min,x_max,step ) 157 | [ y x ] = hist( data,x_min:step:x_max ) ; 158 | return 159 | end%for 160 | 161 | -------------------------------------------------------------------------------- /PCA_analysis/pca_analysis.m: -------------------------------------------------------------------------------- 1 | 2 | %% Workspace initialization 3 | % The workspace is cleaned and some parameters and deffined 4 | clear all ; % this removes all variables stored in your current workspace 5 | close all force ; % this closes all plotted figures 6 | clc ; % this clears the command window log 7 | 8 | % PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9 | % 10 | % Set up the next parameters as your convenience. 11 | % 12 | % (2) This parameter must be an integer between 0 and 100. 13 | % It will be use to compute how many components you need explain a 14 | % given level of variance in the data. 15 | % For example: 16 | % PCA_level = 95 ; 17 | PCA_level = 95 ; 18 | % 19 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20 | 21 | disp( ['================'] ) ; 22 | disp( ['= PCA analysis ='] ) ; 23 | disp( ['================'] ) ; disp( char(10) ) ; 24 | 25 | 26 | %% Loading and examinating the data 27 | % Data are read from an Excel or CSV file (genes at columns and samples at rows) 28 | % which must have the next structure: 29 | % - First column: the name of the class (cell-type, treatment, stage, etc) 30 | % - Second column: the name of the sample 31 | % - First row: a header with the name of the genes at each column. Notice 32 | % that the first two cells of the header corresponds to the sample's 33 | % class and samples's name. 34 | tic ; disp( [' - Loading data...'] ) ; disp( char(10) ) ; 35 | [ input_file,input_path ] = uigetfile( {'*.csv','Comma Sparated Values (*.csv)';'*.xls','Excel 97-2003 (*.xls)';'*.xlsx','Excel 2010 (*.xlsx)'},'MultiSelect','off' ) ; 36 | [ vector ] = strsplit( input_file,'.' ) ; 37 | file_name = vector(1) ; 38 | extension = vector(2) ; 39 | if ( strcmp(extension,'csv') ) 40 | T = readtable( [input_path,input_file],'Delimiter',',','ReadVariableNames',false ) ; 41 | if ( sum(strcmp(T{:,end},'')) > 1 ) 42 | T(:,end) = [] ; 43 | end%if 44 | classes = T{2:end,1} ; 45 | names = T{2:end,2} ; 46 | if ( sum(sum(isnan(char(T{:,end})))) > 0 ) 47 | genes = T{1,3:end-1} ; 48 | data = str2double(T{2:end,3:end-1}) ; 49 | else 50 | genes = T{1,3:end} ; 51 | data = str2double(T{2:end,3:end}) ; 52 | end%if 53 | clear T ; 54 | else 55 | if ( strcmp(extension,'xls') || strcmp(extension,'xlsx') ) 56 | [ data,txt ] = xlsread( [input_path,input_file] ) ; 57 | classes = txt(2:end,1) ; 58 | names = txt(2:end,2) ; 59 | genes = txt(1,3:end) ; 60 | clear txt ; 61 | else 62 | disp(' file-format error.') 63 | return ; 64 | end%if 65 | end%if 66 | whos('data','names','classes','genes') ; 67 | % "data" is the matrix containing the normalized expression profiles from 68 | % single-cell qPCR data, with genes as columns and samples as rows. The 69 | % name of the genes at each column are in "genes", a row-vector. 70 | % Similarly, the name of each sample at each row of the "data" matrix are 71 | % stored in "cell_names", a column-vector. The names on these vectors must 72 | % be unique. The name of the classes at each row are stored in 73 | % "classes_names". This column vector has non-unique classes names. 74 | N = size(data,1) ; 75 | G = size(data,2) ; 76 | classes_unique = unique( sort(classes) ) ; 77 | C = size(classes_unique,1) ; 78 | classes_keys = zeros(N,1) ; 79 | K = size(classes_unique(:),1) ; 80 | for k = 1:C 81 | classes_keys(strcmp(classes_unique(k),classes)) = k ; 82 | end%for 83 | 84 | % plotting parameters 85 | colors = hsv( C ) ; 86 | colors_soft = hsv2rgb( rgb2hsv(colors).*[ones(C,1) 0.5*ones(C,1) ones(C,1)] ) ; 87 | markers = {'+' 'o' '*' 's' 'x' 'd' '.' 'v' 'p' 'h'}' ; 88 | for k=1:ceil( C/size(markers,1)-1 ) 89 | markers = [ markers(:) ; markers(:) ] ; 90 | end%for 91 | 92 | 93 | %% PCA 94 | % PCA is calculated using the corresponding function from the MATLAB's 95 | % statistical toolbox. 96 | disp( [char(10),'Performing PCA analysis...'] ) ; 97 | [coefficient,score,latent,tsquare,explained] = pca( data,'Algorithm','svd' ) ; 98 | % score*coefficient' = data - repmat(mean(data),size(data,1),1) 99 | PCA2 = rotatefactors(score(:,1:2),'Method','varimax') ; 100 | PCA3 = rotatefactors(score(:,1:3),'Method','varimax') ; 101 | IC = cumsum(explained) ; 102 | disp( [' Information content on the two first component: ',num2str(round(IC(2))),'%.'] ) ; 103 | disp( [' Information content on the three first component: ',num2str(round(IC(3))),'%.'] ) ; 104 | % writing output 105 | output_file = strjoin( [ input_path,file_name,'__PCA.csv' ],'' ) ; 106 | fid = fopen(output_file,'w') ; 107 | for k = 1:N 108 | fprintf( fid,'%s,%s,%f,%f,%f\r\n',names{k},classes{k},PCA3(k,:) ) ; 109 | end%for 110 | fclose(fid) ; 111 | % plotting the 2D PCA 112 | d = 0.1*( max(PCA2(:,1)) - min(PCA2(:,1)) ) ; 113 | x_min = min(PCA2(:,1))-d ; 114 | x_max = max(PCA2(:,1))+d ; 115 | d = 0.1*( max(PCA2(:,2)) - min(PCA2(:,2)) ) ; 116 | y_min = min(PCA2(:,2))-d ; 117 | y_max = max(PCA2(:,2))+d ; 118 | [ x y ] = meshgrid( x_min:(x_max-x_min)/100:x_max,y_min:(y_max-y_min)/100:y_max ) ; 119 | x = x(:) ; y = y(:) ; 120 | classification_result = classify( [x y],PCA2(:,1:2),classes,'quadratic' ) ; 121 | figure(1) ; set(1,'WindowStyle','docked') ; 122 | % set(1,'WindowStyle','normal','units','normalized','outerposition',[0 0 1 1]) ; 123 | hold on ; cla ; title(['2D PCA plot and discriminant analysis classification.']) ; 124 | if C > 1 125 | for k = 1:C 126 | index = strcmp( classification_result,classes_unique(k) ) ; 127 | scatter( x(index),y(index),100,colors_soft(k,:),'s','fill' ) ; 128 | end%for 129 | end%if 130 | h=[] ; text = [] ; 131 | for k = 1:C 132 | index = [classes_keys == k] ; 133 | text = [ text ; unique(classes(index)) ] ; 134 | h(k) = plot( PCA2(index,1),PCA2(index,2),markers{k},'Color',colors(k,:) ) ; 135 | end%for 136 | hold off ; grid on ; 137 | legend( h(:),text,'EdgeColor',[1 1 1],'Location','EO' ) ; 138 | xlabel('PC1 (first component)') ; xlim([x_min x_max]) ; 139 | ylabel('PC2 (second component)') ; ylim([y_min y_max]) ; 140 | % plotting the 3D PCA 141 | d = 0.1*( max(PCA3(:,3)) - min(PCA3(:,3)) ) ; 142 | z_min = min(PCA3(:,3))-d ; 143 | z_max = max(PCA3(:,3))+d ; 144 | figure(2) ; title(['3D PCA analysis.']) ; 145 | set(2,'WindowStyle','docked') ; 146 | cla ; hold on ; 147 | for k = 1:C 148 | index = [classes_keys == k] ; 149 | plot3( PCA3(index,1),PCA3(index,2),PCA3(index,3),markers{k},'Color',colors(k,:),'MarkerFaceColor','none','LineWidth',0.1 ) ; 150 | end%for 151 | hold off ; grid on ; view(135,25) ; 152 | legend( text,'EdgeColor',[1 1 1],'Location','EO' ) ; 153 | xlabel('PC1 (first component)') ; xlim([x_min x_max]) ; 154 | ylabel('PC2 (second component)') ; ylim([y_min y_max]) ; 155 | zlabel('PC3 (third component)') ; zlim( [z_min z_max] ) ; 156 | % plotting PCA information 157 | figure(3) ; set(3,'WindowStyle','docked') ; cla ; 158 | noc = min( sum(IC <= PCA_level)+1,G ) ; 159 | title(['PCA analysis. The ',num2str(PCA_level),'% is explained by the first ',num2str(noc),' copmonents.']) ; 160 | subplot(2,2,[1,2]) ; title(['Percentage of explained variance accumulated at each PCA component.']) ; 161 | hold on ; cla ; 162 | bar( IC(1:noc),1,'r' ) ; 163 | bar( IC.*([zeros(noc,1);ones(numel(IC)-noc,1)]),1,'b' ) ; 164 | hold off ; 165 | grid on ; 166 | legend( {['Less or equal than ',num2str(PCA_level),'%.'],['More than the ',num2str(PCA_level),'%.']},'EdgeColor',[1 1 1],'Location','NW' ) ; 167 | xlabel('component') ; xlim([0.5,size(IC,1)+0.5]) ; 168 | ylabel('% of variance') ; ylim( [0 100] ) ; 169 | subplot(2,2,3) ; title('PCA reconstruction, using all the components.') ; 170 | hold on ; cla ; 171 | imagesc( score*coefficient' + repmat(mean(data),size(data,1),1),[-1 1]*max(abs(data(:))) ) ; 172 | colormap( redgreencmap(100) ) ; 173 | hold off ; 174 | axis off ; 175 | subplot(2,2,4) ; title(['PCA approximation using ',num2str(noc),' of components.']) ; 176 | hold on ; cla ; 177 | imagesc( score*(coefficient.*[ones(G,noc) zeros(G,numel(IC)-noc)])' + repmat(mean(data),size(data,1),1),[-1 1]*max(abs(data(:))) ) ; 178 | colormap( redgreencmap(100) ) ; 179 | hold off ; 180 | axis off ; 181 | 182 | %% Picking data-points from the 2D plot 183 | choice = questdlg(['Do you want to identify a super class in you dataset?'],'Select superclass','Yes','No','Yes'); 184 | switch choice 185 | case 'Yes' 186 | choice='No, I want to do it again' ; 187 | msgbox({'Select the data you are interested in by:','',' - doing click on a single point ',' - clicking and dragging to select all points in an area','','Press RETURN when you were ready.',''}) ; 188 | while strcmp(choice,'No, I want to do it again') 189 | figure(5) ; clf ; set(5,'WindowStyle','docked') ; 190 | hold on ; 191 | title(['2D PCA']) ; 192 | gscatter( PCA2(:,1),PCA2(:,2),classes,colors,strjoin([markers(1:C)'],'') ) ; 193 | hold off ; grid on ; 194 | xlim( [x_min x_max] ) ; xlabel('PCA1') ; 195 | ylim( [y_min y_max] ) ; ylabel('PCA2') ; 196 | legend( 'Location','EO' ) ; 197 | h=gname(names,5) ; 198 | superclass=get(h,'String') ; superclass=unique([superclass{:}]) ; 199 | fileID = fopen( strjoin( [ input_path,file_name,'__PCA_superclass.txt' ],'' ),'w' ) ; 200 | fprintf(fileID,'%s\r\n',superclass) ; 201 | fclose(fileID) ; 202 | choice = questdlg(['You have selected ',num2str(size(h,1)),' data points.',char(10),'Do you want to keep this selection or do you want to try it again'],'Are you Happy with your selection?','Yes, it is fine','No, I want to do it again','No, I want to do it again'); 203 | end%while 204 | end%switch -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Feature Selection and Extraction (FSE) 2 | ====================================== 3 | 4 | This repository includes different analyses to explore gene expression data using different Machine Learning approaches: 5 | 6 | * [Principal Component Analysis (PCA)](#pca_analysis-octocat) 7 | * [t-distributed Stochastic Neighbor Embedding (tSNE)](#tsne_analysis-octocat) 8 | * [Gaussian Mixture Model (GMM) analysis](#gmm_analysis-octocat) 9 | * [Decision trees](#tsne_analysis-octocat) 10 | 11 | All the analyses listed above takes the same input: a data table with observations at rows and variables at columns. The input table could be provided in any of the next two formats: *[Excel](https://github.com/mscastillo/Analyses/tree/master/Examples/data.xls)* or *[csv](https://github.com/mscastillo/Analyses/tree/master/Examples/data.csv)*. Tables should include a header with the names of the variables. In addition, the first and second columns should have the sample class and a unique sample identifier respectively. 12 | 13 | Apart from this repository, you might consider to have a look to [Classification/](https://github.com/mscastillo/Classification) for additional further analyses. 14 | 15 | 16 | # `PCA_analysis` [:octocat:](https://github.com/mscastillo/Analyses/tree/master/pca_analysis) 17 | 18 | This repository includes a MATLAB script to perform a dimensionality reduction analysis using the *Principal Components* method. 19 | 20 | > [Principal component analysis for clustering gene expression data](http://bioinformatics.oxfordjournals.org/content/17/9/763.abstract). *Bioinformatics* (2001). 21 | 22 | ### Input 23 | 24 | Data is read from a table in *CSV* or *Excel* file with the format described before. 25 | 26 | ### Output 27 | 28 | The script computes PCA using the singular value decomposition method by using function `pca` from MATLAB's statistichal toolbox. Next are listed the figures and output files: 29 | 30 | 1. A scatter-plot with the two first components and the classification resulting from a Quadratic Discriminant Analysis (QDA). 31 | 2. A scatter-plot with the three first components. Before plotting them, the components are rotate using the [*varimax*](http://pareonline.net/pdf/v10n7.pdf) transformation to find the optimum orientation. 32 | 3. A report showing the information content of each componenent (and up to which the 95% of the variance is explained). 33 | 4. A *CSV* file, in the same folder of the input data with same name and prefix *__PCA*, with the PCA coordinates. See example [here](https://github.com/mscastillo/FSE/blob/master/Examples/data__PCA.csv). 34 | ![PCA analysis](https://raw.githubusercontent.com/mscastillo/FSE/master/Examples/PCA.jpg) 35 | 5. At the end of the script, the program asks if you want to identify a subset of data points in the 2D plot. We refer to this kind subset as *superclass*. If you click *Yes*, a new window will be opened with the PCA scatter-plot. Then, you can click on each single point one by one or drag over the region you are interested in. Once your selection is done, press Enter to finish and an additional text file with the names of the selected data-points will be output. It will be saved with the name of the input file, in the same folder and the prefix *__PCA_superclass*. An example of this output can be found [here](https://github.com/mscastillo/FSE/blob/master/Examples/data__PCA_superclass.txt). 36 | 37 | ### Further analysis 38 | 39 | Consider the use of `GMM_clustering` from [Classification/](https://github.com/mscastillo/Classification) to cluster the results using Gaussian Mixture Models or any of thr SVM scripts from to compute a boundary in bewtween two subpopulations. If you have selected a superclass, you might consider to use the [BDT analysis](https://github.com/mscastillo/FSE#bdt_analysis-octocat). 40 | 41 | 42 | # `tSNE_analysis` [:octocat:](https://github.com/mscastillo/Analyses/tree/master/tSNE_analysis) 43 | 44 | This repository includes a set of scripts to perform a dimensionality reduction analysis using the *t-Distributed Stochastic Neighbor Embedding* (tSNE) method. 45 | 46 | > [Visualizing High-Dimensional Data Using t-SNE](http://lvdmaaten.github.io/tsne/). *Journal of Machine Learning Research* (2008). 47 | 48 | ### Dependencies 49 | 50 | The main script, `tSNE_analysis.m`, depends on the [MATLAB implementation](http://lvdmaaten.github.io/tsne/) of the tSNE method. The original code from the tSNE algorithm can be found in [Simple_tSNE/](https://github.com/mscastillo/Analyses/tree/master/tSNE_analysis/Simple_tSNE). Before running the program check the path in *SETTINGS*, at the begining of the main script. 51 | 52 | ### Input 53 | 54 | Data is read from a table in *CSV* or *Excel* file with the format described before. A pick-file menu will be displayed once you run the script. Next are listed a set of parameters that you can set up: 55 | 56 | 1. `PCA_level`, the percentage of variace to keep for data preprocessing. The tSNE method preprocesses the input data using PCA and choosing a given number of initial dimensions to compute an initial solution. Instead of choosing an arbitrary number of components, the program performs PCA and chooses the number of components comprising a given level of variability. By default, this level is set to keep the 95% of the variance. To skip the preprocessing step, set this variable to 100%. 57 | 2. `seed`, the random generator's seed. tSNE is an stochastic method that will produce a different result every time. For repeatability, the randomness is controlled by fixing the seed of the random generator. By default,it set as zero. Use any other value to generate alternative solutions. 58 | 59 | ### Output 60 | 61 | The script outputs the next files and figures: 62 | 63 | 1. A scatter-plot with the 2D PCA and the classification from the Quadratic Discriminant Analysis (QDA). 64 | 2. A scatter-plot with the 3D PCA plot. Data are rotated using *varimax* transformation to find the optimum orientation. 65 | 3. A report showing the information content of each componenent (and up to which the given percentage of the variance is explained). 66 | 4. A scatter-plot with the 2D tSNE and the classification from the Quadratic Discriminant Analysis (QDA). Coordinates are also saved to a file in the same folder than the input file. 67 | 5. A scatter-plot with the 3D tSNE plot. Data are rotated using [*varimax*](http://pareonline.net/pdf/v10n7.pdf) transformation. Coordinates are also saved to a file in the same folder than the input file. 68 | ![2D and 3D tSNE plots](https://raw.githubusercontent.com/mscastillo/FSE/master/Examples/tSNE.jpg) 69 | 6. Before plotting the 3D tSNE, users may interact with the 2D plot to manually pick a subset of samples. We refer to this subsets as *superclass*. During selection, click on each single point one by one or drag over the region you are interested in. Once your selection is done, press Enter to finish. A text file with the names of the selected data-points will be output. It will be saved with the name of the input file, in the same folder and the prefix *__tSNE_superclass*. An example of this output can be found [here](https://github.com/mscastillo/FSE/blob/master/Examples/data__tSNE_superclass.txt). 70 | 71 | ### Further analysis 72 | 73 | Consider the use of [`gmm_clustering`](https://github.com/mscastillo/Analyses/tree/master/gmm_culstering) to cluster the results using Gaussian Mixture Models. You can also use any of the SVM scripts from [`Classification/`](https://github.com/mscastillo/Classification) to compute a boundary in bwtween two subpopulations. If you have selected a superclass, you might consider to use the [BDT analysis](https://github.com/mscastillo/FSE#bdt_analysis-octocat). 74 | 75 | # `GMM_analysis` [:octocat:](https://github.com/mscastillo/Analyses/tree/master/GMM_analysis) 76 | 77 | This repository includes a scripts to perform a *Gaussian Mixture Model* (GMM) analysis to decompose qPCR data into Gaussian signals. 78 | 79 | > [Mixture-model based estimation of gene expression variance](https://dx.doi.org/10.1093/bioinformatics/btp685). *Bioinformatics* (2010). 80 | 81 | ### Input 82 | 83 | Data is read from a table in *CSV* or *Excel* file with the format described before. A pick-file menu will be displayed once you run the script. Next are listed a set of parameters that you can set up: 84 | 85 | 1. `seed`, the random generator's seed. tSNE is an stochastic method that will produce a different result every time. For repeatability, the randomness is controlled by fixing the seed of the random generator. By default,it set as zero. Use any other value to generate alternative solutions. 86 | 87 | ### Output 88 | 89 | The script fits the data to a GMM with diferent modes, from one to the total number of classes in the data, for each single gene using [`gmdistribution`](http://uk.mathworks.com/help/stats/gmdistribution.fit.html?refresh=true) from Matlab's statistical toolbox. For each of the GMM, the [Akaike's information criterion](http://en.wikipedia.org/wiki/Akaike_information_criterion) is computed and the model that minimises it is reported. Next are listed the figures and output files: 90 | 91 | 1. A figure with 3x3 subplot showing the density of the expression profiles for each single gene across all the samples (in black) and for each of the classes (in different colors). The GMM are overlap, with each of the independent modes in different colors. The mean of each Gaussian is marked in the *x*-axis with a triangle. Each figure is saved as a *PDF* in the same folder of the input file, with the same name and the prefix *__qPCR*. An example of this output can be found [here](https://github.com/mscastillo/FSE/blob/master/Examples). 92 | 2. A *CSV* file with the [hyperparameters](http://en.wikipedia.org/wiki/Mixture_model#Multivariate_Gaussian_mixture_model) of the GMM for each of the genes: (*i*) the *mean* and (*ii*) the *standard deviation* (the squared root of the variance). An example of this output can be found [here](https://github.com/mscastillo/FSE/blob/master/Examples/data__qPCR_analysis.csv). 93 | 94 | ![GMM analysis](https://raw.githubusercontent.com/mscastillo/FSE/master/Examples/gmm_analysis.jpg) 95 | 96 | 97 | # `BDT_analysis` [:octocat:](https://github.com/mscastillo/Analyses/tree/master/BDT_analysis) 98 | 99 | This repository performs an emsembled classificator using a *Bagger Decision Tree* (BDT). Note that a [BDT is not a random forest](http://en.wikipedia.org/wiki/Random_forest#Algorithm). 100 | 101 | > [A comparative study of different machine learning methods on microarray gene expression data](http://www.biomedcentral.com/1471-2164/9/S1/S13). BMC Genomics (2008). 102 | 103 | ### Input 104 | 105 | Data is read from a table in *CSV* or *Excel* file with the format described before. A pick-file menu will be displayed once you run the script. Next are listed a set of parameters that you can tune: 106 | 107 | 1. `NoDT`, the Number of Decission Trees to train the classifier. By default is set to 100. 108 | 109 | 2. `seed`, the random generator's seed. For repeatability, the randomness is controlled by fixing the seed of the random generator. By default,it set as zero. Use any other value to generate alternative solutions. 110 | 111 | ### Output 112 | 113 | The script outputs a set of plots with statistics measuring the stability of the BDT and assessing the results. 114 | 115 | 1. Biased evaluation of the BDT by predicting the classes of the trainning data set. 116 | 2. Fair evaluation of the BDT by predicting the out-of-bag (OOB) observations. 117 | 3. Evaluation of the stability of the BDT by computing the OOB error (missclasication probability) and the margin (the difference between the score for the actual class and the largest one for other classes) for each individual tree and the cumulative value for a given number of trees. 118 | 4. The predictor importance, that averages the changes in the risk due to split on every predictor at each node for the whole ensemble. This risk depends on the seleted split criterion (typically GDI that measure the impurity of the node). 119 | 5. The variable relevance, measured as the increase in the OOB error when the values of the variables are permutted for every tree, then averaged over the entire ensemble and lastly divided by the standard deviation. 120 | 6. ROC curve, the *Receiver Operating Characteristic* (ROC) curve illustrates the performance of the BDT by analysing the trade off between *sensitivity* and *specificcity*. The no-discrimination (ND) line is the theoretical behaviour when classes are randomly asingned. The higher the area under the ROC curves the better the performance. 121 | 7. Similarly to the ROC curve, the Precission Recall (PR) curve summarises the behaviour of the classifier. 122 | ![BDT evaluation](https://raw.githubusercontent.com/mscastillo/FSE/master/Examples/bdt_stats.jpg) 123 | 8. The BDT as a tree plot. 124 | 9. Finally, the script allows you to track a subpopulation across the BDT. We refer to this subpopulation as a super-class. To see how a superclass is partitioned along the BDT, say *Yes* on the dialog menu and pick a one-column text file with the identifiers of the data points you want to track. Only the leaves of the trees with any of these data points will be displayed. Each subpopulation within the superclass will be displayed as a circle of different colors. The sizes of the circles at each node are proportional to the number of samples in the superclass. 125 | ![BDT results](https://raw.githubusercontent.com/mscastillo/FSE/master/Examples/bdt.jpg) 126 | -------------------------------------------------------------------------------- /Examples/data.csv: -------------------------------------------------------------------------------- 1 | "CLASSES","SAMPLES","VARIABLES01","VARIABLES02","VARIABLES03","VARIABLES04","VARIABLES05","VARIABLES06","VARIABLES07","VARIABLES08","VARIABLES09","VARIABLES10" 2 | "class01","cell001",5.3180740755,2.6278963796,3.0444540923,4.7691143874,5.1998628229,6.5827909652,7.0834828136,8.3624114623,9.2702943323,10.9843983122 3 | "class01","cell002",5.1192145411,2.7719803856,3.7549332672,4.396791517,5.4069548371,6.8153972115,7.6259597852,8.049532579,9.2084613588,10.8589388167 4 | "class01","cell003",5.9398294703,2.9328535703,3.2427853578,4.8085140959,5.7487057182,6.8790139046,7.6609445579,8.4895699892,9.5649795707,10.7855589893 5 | "class01","cell004",5.645551875,2.972740854,3.442402313,4.755077099,5.8255838158,6.9889116161,7.7297518553,8.1925103961,9.6403118252,10.5133774186 6 | "class01","cell005",5.4794632249,2.1920283494,3.6877960851,4.3773955448,5.7899630299,6.0005223754,7.8907521163,8.1230837475,9.4170289516,10.1776024605 7 | "class01","cell006",5.639316961,2.1388742028,3.3592282104,4.216018916,5.3185242454,6.865438591,7.9823032229,8.2054941709,9.2059755155,10.3985894967 8 | "class01","cell007",5.5447161105,2.6962663371,3.7363400743,4.790407218,5.5340641274,6.6125664695,7.7690290853,8.1465149106,9.9479331213,10.133931251 9 | "class01","cell008",5.6473114803,2.0938200268,3.3947074753,4.9493039118,5.0899506788,6.9899502057,7.5814464879,8.1890721745,9.0820712071,10.0308895487 10 | "class01","cell009",5.543885934,2.5254044039,3.683415867,4.3275654341,5.1117057442,6.5276800693,7.9283130623,8.0426524109,9.1057094266,10.9391417061 11 | "class01","cell010",5.7210466206,2.5303442184,3.7040474303,4.6712643705,5.1362925489,6.4795233852,7.5800903658,8.6351979169,9.1420411219,10.3013060646 12 | "class01","cell011",5.5224953058,2.8611398114,3.4423054134,4.4386449826,5.6786523048,6.8013476055,7.0169829383,8.2818668559,9.1664604409,10.2955338345 13 | "class01","cell012",5.9937046241,2.4848533336,3.0195776236,4.8335005956,5.4951770191,6.2278429357,7.1208595711,8.538596678,9.6209586439,10.3329362818 14 | "class01","cell013",5.2186766324,2.3934563612,3.3308578802,4.7688542524,5.189710406,6.4980942912,7.8627107187,8.6951630394,9.5737097648,10.467068187 15 | "class01","cell014",5.1057982733,2.6714311397,3.4243094968,4.1672535455,5.495005825,6.9008524885,7.4842965112,8.4991160135,9.0520778903,10.6481984065 16 | "class01","cell015",5.1096974645,2.7412579435,3.2702704234,4.8619804787,5.147608222,6.5746612191,7.8448556746,8.5358010558,9.9312013846,10.0252281815 17 | "class01","cell016",5.063591371,2.5200524674,3.1970537981,4.9898721536,5.0549741469,6.8451781851,7.209405084,8.4451831653,9.7286616817,10.8422066124 18 | "class01","cell017",5.4045799959,2.3477126713,3.821721185,4.5144234565,5.8507126743,6.738640292,7.5522913415,8.1239322776,9.7378416538,10.559032545 19 | "class01","cell018",5.4483729121,2.1499972538,3.4299214094,4.8842810231,5.5605595274,6.5859870358,7.6298833851,8.4903572935,9.0634045007,10.8540999493 20 | "class01","cell019",5.3658161768,2.5860920672,3.8877709543,4.5880260553,5.9296088668,6.246734526,7.0319910158,8.8529981553,9.860440563,10.3478791943 21 | "class01","cell020",5.7635046408,2.2621453177,3.3911829955,4.1547523487,5.6966672006,6.6664162173,7.6147134191,8.8739274059,9.934405119,10.4460266481 22 | "class02","cell021",4.0767062145,5.4749621749,2.6246893239,4.2800538311,5.1033348177,5.166159985,7.0916794148,8.3638996158,8.0840089481,9.4489842038 23 | "class02","cell022",4.2504678763,5.2484335243,2.0187852823,3.7548675334,4.477415679,5.9061119763,6.2908676977,7.611626144,8.4466248193,9.4474981821 24 | "class02","cell023",4.9373521505,5.2954952202,3.2688201766,3.1543673671,4.8596522102,5.465013522,6.5490990065,7.9825279761,9.0927941174,9.3076809829 25 | "class02","cell024",4.4678628518,6.2800804392,2.2781166814,4.1678700867,5.04829153,5.9246298296,6.7803326833,8.0721142767,8.9849049783,9.3550267834 26 | "class02","cell025",5.2706512817,5.9551473629,2.1320458511,3.4781423793,4.1482283083,6.0594318751,6.3237887942,7.6118486453,8.1772464703,10.2627829757 27 | "class02","cell026",4.1670966841,5.6625140818,2.434682438,3.4157406786,4.1808614812,5.8247491708,6.9078411316,7.927014218,8.1840619463,9.9945078215 28 | "class02","cell027",5.3978340402,6.2899501158,2.6449629377,4.0554465712,4.7771670724,6.0465637548,6.6851587133,7.1552170813,8.1306059299,9.7859321357 29 | "class02","cell028",4.7636500079,5.1470945797,2.1437822353,3.0146181859,4.6862180105,5.3320954076,6.214742001,8.3205358416,8.0110595652,9.2608285943 30 | "class02","cell029",4.9997322019,6.0543613688,3.4076936527,3.0685148842,5.2593227825,6.0393869232,7.105818792,7.2651096149,8.5983670309,9.2998568932 31 | "class02","cell030",5.4134946046,6.0412394212,2.469650189,3.9445760377,5.1299004621,6.3726335978,6.1422788255,7.376433724,8.9271204751,9.109384905 32 | "class02","cell031",4.4070804474,5.7945920478,2.4205118998,3.8534326072,5.03851512,6.2260245762,6.4158725974,8.1283023745,9.022366839,10.2923089342 33 | "class02","cell032",4.5862233964,5.2604897908,2.0877451935,3.7440212423,4.0725942495,5.1219540417,6.3356961438,7.6895758723,8.7512433874,9.9994462456 34 | "class02","cell033",4.6573829498,5.8445843913,2.4217806699,4.0319649983,4.1030753785,5.5182196325,6.7507667458,8.0874712059,8.1538918041,9.7888327217 35 | "class02","cell034",5.0803984615,5.4241749592,2.0655505875,4.000207471,4.1251967341,5.5221259563,6.1293987468,7.5600381099,8.8934525737,9.4432555284 36 | "class02","cell035",5.1571152486,5.1896784706,2.7147833339,4.105034024,5.1290386196,5.9687765566,6.5732025638,7.3859937443,8.1788978252,9.2350473328 37 | "class02","cell036",4.1417346614,5.3006639719,3.0768188157,3.4072609446,5.3336149004,5.8456171703,6.1482749846,7.0526577245,8.1899335544,9.8803440666 38 | "class02","cell037",4.2518954119,6.2656386549,2.8924677517,3.9793881275,4.9669198353,6.1163291947,6.1587935021,7.952182799,8.1394331031,10.3971507009 39 | "class02","cell038",4.5086005721,5.1010495369,2.1271259917,3.7872500304,4.1867935073,5.5199397435,7.1093485618,7.6074958842,8.200856861,9.2410272785 40 | "class02","cell039",4.0801925403,5.3429277803,2.1143567355,3.5607650826,5.0220868458,5.2913673931,6.412342698,7.6388557527,8.2379432682,9.364573297 41 | "class02","cell040",4.7380577977,5.0760201905,3.099184108,3.0871023567,4.156063389,5.1225650067,6.8535251744,7.8624682799,8.2775378875,9.561158978 42 | "class03","cell041",3.1281627004,4.732043745,6.180497294,2.5643603998,4.1625562872,5.1300784078,5.3128376263,7.3933475509,7.1852283861,8.9557326711 43 | "class03","cell042",4.1848891452,4.6228564135,5.8023908593,2.9464781937,4.2387844138,5.0478745299,5.0780308071,7.7079826485,8.0677114362,9.0107739615 44 | "class03","cell043",3.6969570366,4.967037221,5.367477451,2.6908817293,4.1120819764,4.6707287623,6.2525732086,6.0519475817,8.6275406115,8.8864981057 45 | "class03","cell044",4.7023205043,5.2861263003,5.1706394592,2.7189628355,3.7258129354,4.2462753841,5.6017796546,6.927797594,7.6139353351,8.1430547995 46 | "class03","cell045",3.6966030964,4.7349694047,6.4264728327,2.3130469836,3.67681978,4.0435350723,6.1442219044,6.1508221691,7.711230447,9.2463320332 47 | "class03","cell046",4.0750353474,4.7436660403,5.303125757,2.4423428101,4.4135961243,4.7293878192,5.6648799205,7.3892631274,8.7049432026,9.725392997 48 | "class03","cell047",3.2673763462,4.2162859626,5.2833113943,2.0355690051,3.5498011876,4.318871055,6.0865960162,7.7132492396,8.637791198,8.6140714292 49 | "class03","cell048",3.6605092693,4.0423209572,6.153523696,3.5998530908,4.4108242714,5.2570796381,5.0374985789,6.1159543209,8.1719829617,9.6822696152 50 | "class03","cell049",3.2790922261,4.5026156228,6.5491278399,3.1322414207,4.3667154188,4.6414869903,6.577153484,7.6270856913,8.7117897316,8.6000668568 51 | "class03","cell050",4.3130892489,4.549961782,5.8947050619,3.6153340906,4.4761643595,5.4576248291,6.3866082671,6.0314844118,8.3281909235,9.5355390117 52 | "class03","cell051",4.5088087222,5.1322245244,6.2171160982,2.28321173,3.8757883118,5.2717231296,6.2918457376,7.1844432232,7.5831802328,8.7875546081 53 | "class03","cell052",3.6075631443,5.6574616401,5.2660263359,3.5953872459,4.1009978219,4.9890458242,6.4083527055,7.3574714032,8.1472790362,8.7160770698 54 | "class03","cell053",4.187382678,5.6207334139,6.6514360879,3.3763878321,4.6469974401,4.3063219454,5.6639060187,6.9251534058,7.4229066822,8.3771230048 55 | "class03","cell054",3.5094803787,4.7930823943,5.9368387097,3.0000760847,3.7689684732,5.6582377695,6.0691589928,7.533487552,7.5118335724,8.2176401295 56 | "class03","cell055",3.9190769143,4.4165208014,6.1773336473,2.762164009,3.1039556453,4.4595512471,5.9967863365,7.5571221612,8.1781034972,8.5350557713 57 | "class03","cell056",4.4417995985,5.3231100513,5.0633290049,2.4462000807,4.5012548591,5.6014210863,5.9180764833,7.0841557707,7.9142575289,9.2576497672 58 | "class03","cell057",4.0348833693,5.3151936072,6.4015821841,3.3024093587,4.0932509569,4.3875817102,5.4764347927,6.2387960996,7.7129008773,9.3559742062 59 | "class03","cell058",3.5807762611,5.2828400791,6.2966459214,2.3960671611,3.6150056055,4.6470314947,5.4306379904,6.3772434263,8.0438000122,9.2016753988 60 | "class03","cell059",3.5182729433,5.2881059925,5.2081700216,2.1111752966,4.7268603217,4.1515550511,5.7822612971,6.3154775976,8.299938869,8.0169779989 61 | "class03","cell060",3.7839132771,4.1834595433,5.9094049016,3.3290536988,3.3882764258,5.1087143843,5.3944101842,6.0724341292,8.0107091057,9.4604883431 62 | "class04","cell061",3.8446639956,3.3864906609,4.9713033398,6.098617066,3.1812173058,3.8988871131,4.6633304775,6.443506547,6.9511458676,7.0517149422 63 | "class04","cell062",3.5419084413,4.7917831476,5.7888955111,5.6608472192,3.3208759326,4.9270605737,4.3044680257,6.7555981423,6.7249185616,7.8930619566 64 | "class04","cell063",2.0853197119,3.1981792994,4.2750931895,6.2389431104,2.0951093462,3.0845955958,4.6960153194,6.164865929,7.5762268568,8.2926039147 65 | "class04","cell064",2.7563722741,3.0883311435,4.7800098289,5.721273142,2.697569617,4.9459166683,4.2433169086,5.1413686708,7.5605916417,8.0424059053 66 | "class04","cell065",3.408679249,4.1145903116,5.85471245,6.513019087,2.9026811607,3.3784136862,5.7683061155,6.8454891404,7.3370244285,7.7446253216 67 | "class04","cell066",3.459026091,4.5449901344,5.8349876648,5.8278014974,2.4818099942,4.3342406001,4.1885567801,6.6007441847,6.2670077193,8.8742693327 68 | "class04","cell067",2.4485541413,3.623880115,5.4271480232,5.9846902088,3.4300900266,4.1728792294,5.8600812522,5.5718937128,6.0431117744,8.6590656491 69 | "class04","cell068",2.5381094635,3.3579649586,5.2366747672,6.3894864663,3.712364584,4.3502248328,4.7980399381,6.0873264657,7.1196814117,8.6981709599 70 | "class04","cell069",3.34606233,3.6779113565,4.6865757805,6.9454677702,2.5630153902,3.7220440984,4.0948029241,6.9695524739,6.6016380361,7.7450684798 71 | "class04","cell070",2.9549843955,3.4202912741,5.8720546534,5.655509921,3.4621016594,4.2405568541,4.6847470063,6.4313561343,7.8788194277,8.1863691504 72 | "class04","cell071",3.2474328253,4.0203050395,4.2495480813,6.6756063662,2.275525785,4.6223017702,5.4719323178,6.6779391947,7.9618072721,8.7451051293 73 | "class04","cell072",2.4728898653,4.8127286465,5.461170723,6.4781444545,3.6734455635,3.0385149548,5.5893643147,5.866521122,6.5732407778,8.867003217 74 | "class04","cell073",2.354247509,4.2578478773,5.2929548649,6.9083489128,2.2772034315,3.1677470166,5.0898117965,5.9412494312,7.6016405739,8.3369285487 75 | "class04","cell074",3.6592867714,3.2030677776,5.6663039713,5.063845259,3.1764187708,4.9496033344,5.372446926,6.1214268221,7.7922227029,7.4135529159 76 | "class04","cell075",3.5338433359,3.7817095055,4.7965644564,5.7137379724,2.7323136009,4.3026990648,5.7872653919,5.5381830871,7.1950531536,8.3077011841 77 | "class04","cell076",3.8689565462,3.1092332304,5.4996444187,6.3253076686,3.6135190893,3.4624756323,4.1095835798,6.4980369353,7.7680334714,7.1441031024 78 | "class04","cell077",2.2157778102,4.0025658264,5.670441021,5.5630031183,3.0075615716,3.8069822862,4.6073227594,6.0077755469,7.8874630824,7.8134538302 79 | "class04","cell078",2.3644550112,3.8634423438,4.6449207947,5.4607661346,2.9791886774,3.2440410365,4.0923831127,6.2936193325,7.0983161748,8.3338630664 80 | "class04","cell079",2.1981905648,4.995120699,5.1045232337,6.4222571024,3.7540974468,3.5368776428,4.3909535273,5.6154911641,7.4567736492,8.8674513191 81 | "class05","cell080",2.9795276038,4.623205162,5.9582582649,6.249145834,2.7062836259,3.5156923402,5.440331605,5.2774492722,7.1535165957,8.6219000645 82 | "class05","cell081",2.0834828742,3.9732993726,4.9775898009,4.8946055071,5.9615132517,2.4518536524,4.6418801062,4.2732232476,6.8977715235,7.1909823579 83 | "class05","cell082",2.6921426756,2.6371680577,4.6118822819,5.8601208633,6.0997122148,3.0149366438,3.9621305108,5.5007733212,7.0500746835,7.238529131 84 | "class05","cell083",1.9325464564,3.5053790699,3.0416194295,4.3003896641,5.1588437486,2.956837905,4.5512779153,5.3407140439,7.2069281541,7.5206727544 85 | "class05","cell084",3.1729795399,3.4853750224,4.5088460501,4.1352078124,6.9850452322,4.160159618,5.1135616106,4.125166493,6.1295119533,6.8210615889 86 | "class05","cell085",3.209178592,2.274622675,3.9805355397,4.1883821359,5.1445251032,3.3864852508,4.7535973998,4.1259868195,5.6069172028,6.5350700618 87 | "class05","cell086",2.9322926175,2.9107916824,3.9789956825,4.3664877812,5.9753392118,3.5549392034,4.5777066378,4.3410017909,5.2252849934,7.2945122829 88 | "class05","cell087",1.8695705583,2.6155603365,3.2617022843,4.7249777814,6.848399769,3.6103370275,3.2444787918,4.0438740391,6.135584508,7.9384183831 89 | "class05","cell088",2.0168336397,3.6025222575,4.8216836378,4.6746815845,5.8822063734,2.7756812266,3.8719114559,4.9730821023,6.3094618133,6.9095804875 90 | "class05","cell089",1.5516093431,2.6336667411,3.7263988436,4.0261194902,6.371771538,3.156025724,4.3213031454,5.8609037911,6.7058674056,6.2518151106 91 | "class05","cell090",2.7540233591,4.0039615653,3.5505828014,5.2072644912,6.8305363328,3.2448070399,4.0272050148,5.380526392,5.185510123,6.9924694625 92 | "class05","cell091",2.9740848992,3.848286592,3.7663300592,4.2132598239,6.9816817914,2.3499339481,3.1125636323,5.1630447297,6.4793740614,6.6712327269 93 | "class05","cell092",3.0431214312,2.8721257957,3.8400731637,4.3276171787,7.0820288937,3.256795525,3.5113609835,5.9316680701,6.1560002198,6.8975282904 94 | "class05","cell093",2.24836304,3.1133448267,4.2221314347,5.4112746423,5.426607442,3.5536273854,4.8653034466,4.2184591863,5.3824749946,7.8634575779 95 | "class05","cell094",2.3391097873,3.5536316419,4.2564916629,5.9214988544,5.5782074919,2.9535835672,3.0349825964,6.0304664534,7.0986791855,6.9025411276 96 | "class05","cell095",1.3328984669,3.8657058048,3.8850854102,6.1784257926,7.007688706,3.8699575082,4.9313162072,4.2415326708,6.3203605237,6.8724599208 97 | "class05","cell096",3.0118205117,3.3631734272,3.8902477106,5.276433528,6.3267974551,3.6354311978,3.1745677095,5.1560398953,5.9852890994,6.805988228 98 | "class05","cell097",2.007110663,3.2851513609,4.1523961355,6.2290248432,6.1266206728,2.8050538841,4.4960247113,4.3201065968,7.1061947575,6.3136205175 99 | "class05","cell098",1.4598973321,2.7290524577,4.4702829894,5.2377565867,6.3702838979,3.0156497397,4.1185065242,5.2507906245,6.4666678895,6.581668797 100 | "class05","cell099",3.0116807708,3.0205964341,5.1263110242,5.1526001446,6.8322838359,2.8639940791,3.4874489527,4.0102403505,6.010581328,6.194124467 101 | "class05","cell100",2.7051931047,3.5960954461,4.6152203815,4.7394275785,6.1893403395,3.7341929003,4.278171619,5.714353066,6.8776205133,6.9601616351 102 | -------------------------------------------------------------------------------- /tSNE_analysis/tsne_analysis.m: -------------------------------------------------------------------------------- 1 | 2 | %% Workspace initialization 3 | % The workspace is cleaned and some parameters and deffined 4 | clear all ; % this removes all variables stored in your current workspace 5 | close all force ; % this closes all plotted figures 6 | clc ; % this clears the command window log 7 | 8 | % SETTINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9 | % 10 | % You have to update the next variables before running the script: 11 | % 12 | % (1) Path (full or relative) to the folder containing the "tSNE.m" file. 13 | % For example: 14 | % addpath( 'Simple_tSNE' ) ; % or 15 | % addpath( 'C:\Documents\MATLAB\tSNE_analysis\Simple_tSNE' ) ; 16 | addpath( 'Simple_tSNE' ) ; 17 | % 18 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19 | 20 | % PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21 | % 22 | % The next parameters are choosen to produce an optimal solution. I would 23 | % recommend not to modify them, but they could be changed by the user to 24 | % produce different scnearios. 25 | % 26 | % (2) This parameter will fix the number of components that 27 | % are going to be used to initialize "initial_dims" in the tSNE 28 | % analysis. Instead of using a fixed value for "initial_dims", I 29 | % propose to use the number of components that expains at leats a fixed 30 | % percentage of the variance in the PCA analysis. Therefore, 31 | % PCA_level must be an integer number between 0 and 100. I would 32 | % recomend to use by default a high value (for instances, the 95%). 33 | % For example: 34 | % PCA_level = 95 ; 35 | PCA_level = 95 ; 36 | % 37 | % (3) This parameter is the seed of the random-number generator. By 38 | % fixing it, we have controlled the randomness of the results and we 39 | % could reproduce it at any moment. The seed could have any integer 40 | % value, but I would recommend to reset it always by ussing zero. 41 | % For example: 42 | % seed = 0 ; 43 | seed = 0 ; 44 | % 45 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 46 | 47 | 48 | disp( ['================='] ) ; 49 | disp( ['= tSNE analysis ='] ) ; 50 | disp( ['================='] ) ; disp( char(10) ) ; 51 | 52 | 53 | %% Loading and examinating the data 54 | % Data are read from an Excel or CSV file (genes at columns and samples at rows) 55 | % which must have the next structure: 56 | % - First column: the name of the class (cell-type, treatment, stage, etc) 57 | % - Second column: the name of the sample 58 | % - First row: a header with the name of the genes at each column. Notice 59 | % that the first two cells of the header corresponds to the sample's 60 | % class and samples's name. 61 | tic ; disp( [' - Loading data...'] ) ; disp( char(10) ) ; 62 | [ input_file,input_path ] = uigetfile( {'*.csv','Comma Sparated Values (*.csv)';'*.xls','Excel 97-2003 (*.xls)';'*.xlsx','Excel 2010 (*.xlsx)'},'MultiSelect','off' ) ; 63 | [ vector ] = strsplit( input_file,'.' ) ; 64 | file_name = vector(1) ; 65 | extension = vector(2) ; 66 | if ( strcmp(extension,'csv') ) 67 | T = readtable( [input_path,input_file],'Delimiter',',','ReadVariableNames',false ) ; 68 | if ( sum(strcmp(T{:,end},'')) > 1 ) 69 | T(:,end) = [] ; 70 | end%if 71 | classes = T{2:end,1} ; 72 | names = T{2:end,2} ; 73 | if ( sum(sum(isnan(char(T{:,end})))) > 0 ) 74 | genes = T{1,3:end-1} ; 75 | data = str2double(T{2:end,3:end-1}) ; 76 | else 77 | genes = T{1,3:end} ; 78 | data = str2double(T{2:end,3:end}) ; 79 | end%if 80 | clear T ; 81 | else 82 | if ( strcmp(extension,'xls') || strcmp(extension,'xlsx') ) 83 | [ data,txt ] = xlsread( [input_path,input_file] ) ; 84 | classes = txt(2:end,1) ; 85 | names = txt(2:end,2) ; 86 | genes = txt(1,3:end) ; 87 | clear txt ; 88 | else 89 | disp(' file-format error.') 90 | return ; 91 | end%if 92 | end%if 93 | whos('data','names','classes','genes') ; 94 | % "data" is the matrix containing the normalized expression profiles from 95 | % single-cell qPCR data, with genes as columns and samples as rows. The 96 | % name of the genes at each column are in "genes", a row-vector. 97 | % Similarly, the name of each sample at each row of the "data" matrix are 98 | % stored in "cell_names", a column-vector. The names on these vectors must 99 | % be unique. The name of the classes at each row are stored in 100 | % "classes_names". This column vector has non-unique classes names. 101 | N = size(data,1) ; 102 | G = size(data,2) ; 103 | classes_unique = unique( sort(classes) ) ; 104 | C = size(classes_unique,1) ; 105 | classes_keys = zeros(N,1) ; 106 | K = size(classes_unique(:),1) ; 107 | for k = 1:C 108 | classes_keys(strcmp(classes_unique(k),classes)) = k ; 109 | end%for 110 | 111 | % plotting parameters 112 | colors = hsv( C ) ; 113 | colors_soft = hsv2rgb( rgb2hsv(colors).*[ones(C,1) 0.5*ones(C,1) ones(C,1)] ) ; 114 | markers = {'+' 'o' '*' 's' 'x' 'd' '.' 'v' 'p' 'h'}' ; 115 | for k=1:ceil( C/size(markers,1)-1 ) 116 | markers = [ markers(:) ; markers(:) ] ; 117 | end%for 118 | 119 | 120 | %% PCA 121 | % PCA is calculate first to estimate how to initialise the tSNE method (by 122 | % choosing the number of components that explain a fixed level of variance 123 | % defined by PCA_level). 124 | disp( [char(10),'Performing PCA analysis...'] ) ; 125 | [coefficient,score,latent,tsquare,explained] = pca( data,'Algorithm','svd' ) ; 126 | % score*coefficient' = data - repmat(mean(data),size(data,1),1) 127 | PCA2 = rotatefactors(score(:,1:2),'Method','varimax') ; 128 | PCA3 = rotatefactors(score(:,1:3),'Method','varimax') ; 129 | IC = cumsum(explained) ; 130 | disp( [' Information content on the two first component: ',num2str(round(IC(2))),'%.'] ) ; 131 | disp( [' Information content on the three first component: ',num2str(round(IC(3))),'%.'] ) ; 132 | % writing output 133 | output_file = strjoin( [ input_path,file_name,'__PCA.csv' ],'' ) ; 134 | fid = fopen(output_file,'w') ; 135 | for k = 1:N 136 | fprintf( fid,'%s,%s,%f,%f,%f\r\n',names{k},classes{k},PCA3(k,:) ) ; 137 | end%for 138 | fclose(fid) ; 139 | % plotting the 2D PCA 140 | d = 0.1*( max(PCA2(:,1)) - min(PCA2(:,1)) ) ; 141 | x_min = min(PCA2(:,1))-d ; 142 | x_max = max(PCA2(:,1))+d ; 143 | d = 0.1*( max(PCA2(:,2)) - min(PCA2(:,2)) ) ; 144 | y_min = min(PCA2(:,2))-d ; 145 | y_max = max(PCA2(:,2))+d ; 146 | [ x y ] = meshgrid( x_min:(x_max-x_min)/100:x_max,y_min:(y_max-y_min)/100:y_max ) ; 147 | x = x(:) ; y = y(:) ; 148 | classification_result = classify( [x y],PCA2(:,1:2),classes,'quadratic' ) ; 149 | figure(1) ; set(1,'WindowStyle','docked') ; 150 | % set(1,'WindowStyle','normal','units','normalized','outerposition',[0 0 1 1]) ; 151 | hold on ; cla ; title(['2D PCA plot and discriminant analysis classification.']) ; 152 | if C > 1 153 | for k = 1:C 154 | index = strcmp( classification_result,classes_unique(k) ) ; 155 | scatter( x(index),y(index),100,colors_soft(k,:),'s','fill' ) ; 156 | end%for 157 | end%if 158 | h=[] ; text = [] ; 159 | for k = 1:C 160 | index = [classes_keys == k] ; 161 | text = [ text ; unique(classes(index)) ] ; 162 | h(k) = plot( PCA2(index,1),PCA2(index,2),markers{k},'Color',colors(k,:) ) ; 163 | end%for 164 | hold off ; grid on ; 165 | legend( h(:),text,'EdgeColor',[1 1 1],'Location','EO' ) ; 166 | xlabel('PC1 (first component)') ; xlim([x_min x_max]) ; 167 | ylabel('PC2 (second component)') ; ylim([y_min y_max]) ; 168 | % plotting the 3D PCA 169 | d = 0.1*( max(PCA3(:,3)) - min(PCA3(:,3)) ) ; 170 | z_min = min(PCA3(:,3))-d ; 171 | z_max = max(PCA3(:,3))+d ; 172 | figure(2) ; title(['3D PCA analysis.']) ; 173 | set(2,'WindowStyle','docked') ; 174 | cla ; hold on ; 175 | for k = 1:C 176 | index = [classes_keys == k] ; 177 | plot3( PCA3(index,1),PCA3(index,2),PCA3(index,3),markers{k},'Color',colors(k,:),'MarkerFaceColor','none','LineWidth',0.1 ) ; 178 | end%for 179 | hold off ; grid on ; view(135,25) ; 180 | legend( text,'EdgeColor',[1 1 1],'Location','EO' ) ; 181 | xlabel('PC1 (first component)') ; xlim([x_min x_max]) ; 182 | ylabel('PC2 (second component)') ; ylim([y_min y_max]) ; 183 | zlabel('PC3 (third component)') ; zlim( [z_min z_max] ) ; 184 | % plotting PCA information 185 | figure(3) ; set(3,'WindowStyle','docked') ; cla ; 186 | noc = min( sum(IC <= PCA_level)+1,G ) ; 187 | title(['PCA analysis. The ',num2str(PCA_level),'% is explained by the first ',num2str(noc),' copmonents.']) ; 188 | subplot(2,2,[1,2]) ; title(['Percentage of explained variance accumulated at each PCA component.']) ; 189 | hold on ; cla ; 190 | bar( IC(1:noc),1,'r' ) ; 191 | bar( IC.*([zeros(noc,1);ones(numel(IC)-noc,1)]),1,'b' ) ; 192 | hold off ; 193 | grid on ; 194 | legend( {['Less or equal than ',num2str(PCA_level),'%.'],['More than the ',num2str(PCA_level),'%.']},'EdgeColor',[1 1 1],'Location','NW' ) ; 195 | xlabel('component') ; xlim([0.5,size(IC,1)+0.5]) ; 196 | ylabel('% of variance') ; ylim( [0 100] ) ; 197 | subplot(2,2,3) ; title('PCA reconstruction, using all the components.') ; 198 | hold on ; cla ; 199 | imagesc( score*coefficient' + repmat(mean(data),size(data,1),1),[-1 1]*max(abs(data(:))) ) ; 200 | colormap( redgreencmap(100) ) ; 201 | hold off ; 202 | axis off ; 203 | subplot(2,2,4) ; title(['PCA approximation using ',num2str(noc),' of components.']) ; 204 | hold on ; cla ; 205 | imagesc( score*(coefficient.*[ones(G,noc) zeros(G,numel(IC)-noc)])' + repmat(mean(data),size(data,1),1),[-1 1]*max(abs(data(:))) ) ; 206 | colormap( redgreencmap(100) ) ; 207 | hold off ; 208 | axis off ; 209 | 210 | 211 | %% 2D tSNE 212 | % First, run the tSNE analysis by projecting the data into two dimmensions 213 | rng(seed) ; % this will reset the random-number generator's seed 214 | initial_dims = noc ; % number of PCA components to initialise the method 215 | no_dims = 2 ; % number of dessired dimessions 216 | disp( [char(10),'Performing tSNE analysis...'] ) ; 217 | disp( [' no_dims = ',num2str(no_dims),', the desidered dimension reduction.'] ) ; 218 | disp( [' initial_dims = ',num2str(noc),', the number of PCA components to initialize the algorithm.',] ) ; 219 | % computing tSNE analysis 220 | tSNE2 = rotatefactors(tsne( data,[],no_dims,initial_dims ),'Method','varimax') ; 221 | % writting output file 222 | tsne_header = repmat({'tSNE'},1,no_dims) ; 223 | for k=1:no_dims 224 | tsne_header(k) = {strjoin( [ tsne_header(k) num2str(k)],'' )} ; 225 | end 226 | % writing output 227 | output_file = strjoin( [ input_path,file_name,'__tSNE2D__seed_',num2str(seed),'__PCA_level_',num2str(PCA_level),'.csv' ],'' ) ; 228 | fid = fopen(output_file,'w') ; 229 | for k = 1:N 230 | fprintf( fid,'%s,%s,%f,%f\r\n',names{k},classes{k},tSNE2(k,:) ) ; 231 | end%for 232 | fclose(fid) ; 233 | % plotting the tSNE result in 2D plus a classification (based on a discriminat analysis) 234 | d = 0.1*( max(tSNE2(:,1)) - min(tSNE2(:,1)) ) ; 235 | x_min = min(tSNE2(:,1)) - d ; 236 | x_max = max(tSNE2(:,1))+d*2 ; 237 | d = 0.1*( max(tSNE2(:,2)) - min(tSNE2(:,2)) ) ; 238 | y_min = min(tSNE2(:,2)) - d*2 ; 239 | y_max = max(tSNE2(:,2)) + d ; 240 | 241 | [ x y ] = meshgrid( x_min:(x_max-x_min)/100:x_max,y_min:(y_max-y_min)/100:y_max ) ; 242 | x = x(:) ; y = y(:) ; 243 | classification_result = classify( [x y],tSNE2(:,1:2),classes,'quadratic' ) ; 244 | 245 | figure(4) ; set(4,'WindowStyle','docked') ; 246 | cla ; hold on ; 247 | title(['2D tSNE plot and a discriminant analysis classification, using ',num2str(initial_dims),' initial dimensions.']) ; 248 | if C > 1 249 | for k = 1:C 250 | index = strcmp( classification_result,classes_unique(k) ) ; 251 | scatter( x(index),y(index),100,colors_soft(k,:),'s','fill' ) ; 252 | end%for 253 | end%if 254 | text = [] ; h=[] ; 255 | for k = 1:C 256 | index = [classes_keys == k] ; 257 | text = [ text ; unique(classes(index)) ] ; 258 | h(k) = plot( tSNE2(index,1),tSNE2(index,2),markers{k},'Color',colors(k,:) ) ; 259 | end%for 260 | hold off ; grid on ; 261 | xlim( [x_min x_max] ) ; xlabel('tSNE1') ; 262 | ylim( [y_min y_max] ) ; ylabel('tSNE2') ; 263 | legend( h(:),text,'EdgeColor',[1 1 1],'Location','EO' ) ; 264 | 265 | % Ask for select superclass 266 | choice = questdlg(['Do you want to identify a supper class in you dataset?'],'Select superclass','Yes','No','Yes'); 267 | switch choice 268 | case 'Yes' 269 | choice='No, I want to do it again' ; 270 | % msgbox({'Select the data you are interested in by:','',' - doing click on a single point ',' - clicking and dragging to select all points in an area','','Press RETURN when you were ready.',''}) ; 271 | while strcmp(choice,'No, I want to do it again') 272 | figure(5) ; clf ; set(5,'WindowStyle','docked') ; 273 | hold on ; 274 | title(['2D tSNE plot and a discriminant analysis classification, using ',num2str(initial_dims),' initial dimensions.']) ; 275 | gscatter( tSNE2(:,1),tSNE2(:,2),classes,colors,strjoin([markers(1:C)'],'') ) ; 276 | hold off ; grid on ; 277 | xlim( [x_min x_max] ) ; xlabel('tSNE1') ; 278 | ylim( [y_min y_max] ) ; ylabel('tSNE2') ; 279 | legend( 'Location','EO' ) ; 280 | h=gname(names,5) ; 281 | superclass=get(h,'String') ; superclass=table2array(unique(cell2table(superclass))) ; 282 | fileID = fopen( strjoin( [ input_path,file_name,'__superclass.txt' ],'' ),'w' ) ; 283 | for k=1:numel(superclass) 284 | fprintf(fileID,'%s\r\n',superclass{k}) ; 285 | end%for 286 | fclose(fileID) ; 287 | choice = questdlg(['You have selected ',num2str(size(h,1)),' data points.',char(10),'Do you want to keep this selection or do you want to try it again'],'Are you Happy with your selection?','Yes, it is fine','No, I want to do it again','No, I want to do it again'); 288 | end%while 289 | end%switch 290 | 291 | %% 3D tSNE 292 | % Second, run the tSNE analysis by projecting the data into three 293 | % dimmensions. 294 | rng(seed) ; % this will reset the random-number generator's seed 295 | initial_dims = noc ; % number of PCA components to initialise the method 296 | no_dims = 3 ; % number of dessired dimessions 297 | disp( [char(10),'Performing tSNE analysis...'] ) ; 298 | disp( [' no_dims = ',num2str(no_dims),', the desidered dimension reduction.'] ) ; 299 | disp( [' initial_dims = ',num2str(noc),', the number of PCA components to initialize the algorithm.',] ) ; 300 | % computing tSNE analysis 301 | tSNE3 = rotatefactors(tsne( data,[],no_dims,initial_dims ),'Method','varimax') ; 302 | % writting output file 303 | output_file = strjoin( [ input_path,file_name,'__tSNE3D__seed_',num2str(seed),'__PCA_level_',num2str(PCA_level),'.csv' ],'' ) ; 304 | fid = fopen(output_file,'w') ; 305 | for k = 1:N 306 | fprintf( fid,'%s,%s,%f,%f,%f\r\n',names{k},classes{k},tSNE3(k,:) ) ; 307 | end%for 308 | fclose(fid) ; 309 | % plotting the tSNE result in 3D 310 | figure(6) ; title(['3D tSNE analysis with ',num2str(initial_dims),' initial dimensions.']) ; 311 | set(6,'WindowStyle','docked') ; 312 | hold on ; cla ; 313 | d = 0.1*( max(tSNE3(:,1)) - min(tSNE3(:,1)) ) ; 314 | x_min = min(tSNE3(:,1)) - d ; 315 | x_max = max(tSNE3(:,1))+d*2 ; 316 | d = 0.1*( max(tSNE3(:,2)) - min(tSNE3(:,2)) ) ; 317 | y_min = min(tSNE3(:,2)) - d*2 ; 318 | y_max = max(tSNE3(:,2)) + d ; 319 | d = 0.1*( max(tSNE3(:,3)) - min(tSNE3(:,3)) ) ; 320 | z_min = min(tSNE3(:,3)) - d ; 321 | z_max = max(tSNE3(:,3)) + d ; 322 | text = [] ; 323 | for k = 1:C 324 | index = [classes_keys == k] ; 325 | text = [ text ; unique(classes(index)) ] ; 326 | plot3( tSNE3(index,1),tSNE3(index,2),tSNE3(index,3),markers{k},'Color',colors(k,:) ) ; 327 | end%for 328 | hold off ; grid on ; view(45,30) ; 329 | xlim( [x_min x_max] ) ; xlabel('tSNE1') ; 330 | ylim( [y_min y_max] ) ; ylabel('tSNE2') ; 331 | zlim( [z_min z_max] ) ; zlabel('tSNE3') ; 332 | legend( text,'EdgeColor',[1 1 1],'Location','EO' ) ; 333 | 334 | -------------------------------------------------------------------------------- /BDT_analysis/bdt_analysis.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | function bdt_analysis() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4 | 5 | 6 | %% Workspace initialization 7 | % The workspace is cleaned and some parameters and deffined 8 | clear all ; % this removes all variables stored in your current workspace 9 | 10 | % PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11 | % 12 | % The next parameters are choosen to produce an optimal solution. I would 13 | % recommend not to modify them, but they could be changed by the user to 14 | % produce different scnearios. 15 | % 16 | % (1) The Number of Decission Trees to construct the embedded model. 17 | % For example: 18 | % NoDT = 100 ; 19 | NoDT = 100 ; 20 | % 21 | % (2) This parameter is the seed of the random-number generator. By 22 | % fixing it, we have controlled the randomness of the results and we 23 | % could reproduce it at any moment. The seed could have any integer 24 | % value, but I would recommend to reset it always by ussing zero. 25 | % For example: 26 | % seed = 0 ; 27 | seed = 0 ; 28 | % 29 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30 | 31 | close all force ; % this closes all plotted figures 32 | clc ; % this clears the command window log 33 | rng(seed) ; % random seed is set here 34 | 35 | disp( ['==============================================='] ) ; 36 | disp( ['= Classification using Bagged Decission Trees ='] ) ; 37 | disp( ['==============================================='] ) ; disp( char(10) ) ; 38 | 39 | 40 | %% Loading and examinating the data 41 | % Data are read from an Excel or CSV file (genes at columns and samples at rows) 42 | % which must have the next structure: 43 | % - First column: the name of the class (cell-type, treatment, stage, etc) 44 | % - Second column: the name of the sample 45 | % - First row: a header with the name of the genes at each column. Notice 46 | % that the first two cells of the header corresponds to the sample's 47 | % class and samples's name. 48 | tic ; disp( [' - Loading data...'] ) ; disp( char(10) ) ; 49 | [ input_file,input_path ] = uigetfile( {'*.csv','Comma Sparated Values (*.csv)';'*.xls','Excel 97-2003 (*.xls)';'*.xlsx','Excel 2010 (*.xlsx)'},'MultiSelect','off' ) ; 50 | [ vector ] = strsplit( input_file,'.' ) ; 51 | file_name = vector(1) ; 52 | extension = vector(2) ; 53 | if ( strcmp(extension,'csv') ) 54 | T = readtable( [input_path,input_file],'Delimiter',',','ReadVariableNames',false ) ; 55 | classes_names = T{2:end,1} ; 56 | samples = T{2:end,2} ; 57 | if ( sum(sum(isnan(char(T{:,end})))) > 0 ) 58 | genes = T{1,3:end-1} ; 59 | data = str2double(T{2:end,3:end-1}) ; 60 | else 61 | genes = T{1,3:end} ; 62 | data = str2double(T{2:end,3:end}) ; 63 | end%if 64 | clear T ; 65 | else 66 | if ( strcmp(extension,'xls') || strcmp(extension,'xlsx') ) 67 | [ data,txt ] = xlsread( [input_path,input_file] ) ; 68 | classes_names = txt(2:end,1) ; 69 | samples = txt(2:end,2) ; 70 | genes = txt(1,3:end) ; 71 | clear txt ; 72 | else 73 | disp(' file-format error.') 74 | return ; 75 | end%if 76 | end%if 77 | whos('data','samples','classes_names','genes') ; 78 | % "data" is the matrix containing the normalized expression profiles from 79 | % single-cell qPCR data, with genes as columns and samples as rows. The 80 | % name of the genes at each column are in "genes", a row-vector. 81 | % Similarly, the name of each sample at each row of the "data" matrix are 82 | % stored in "cell_names", a column-vector. The names on these vectors must 83 | % be unique. The name of the classes at each row are stored in 84 | % "classes_names". This column vector has non-unique classes names. 85 | N = size(data,1) ; 86 | G = size(data,2) ; 87 | classes_unique = unique( sort(classes_names) ) ; 88 | K = size(classes_unique(:),1) ; 89 | classes_keys = zeros(N,1) ; 90 | classes_matrix = zeros(N,N) ; 91 | % The population of classes can be introduced as a prior knowledge by 92 | % indicating the frecuency of each class. A non informative prior should be 93 | % a constant value for all the classes, for instances: 94 | classes_prior = ones(K,1) ; 95 | % Alternatively you can use your custom values. 96 | % classes_prior = [ 1.42 , 1.42 , 0.4 , 0.25 , 0.5 , 0.20 , 0.07 , 1.42 , 1.42 ]' ; 97 | for k = 1:K 98 | indexes = strcmp( classes_unique(k),classes_names ) ; 99 | classes_keys(indexes) = k ; 100 | classes_matrix = classes_matrix + 1.0*indexes*indexes' ; 101 | end%for 102 | % "classes_keys" is a column vector in which the classes names are mapped 103 | % to a key column-vector of integers. 104 | fprintf(' dataset with %i samples, %i genes and %i unique classes.',N,G,K ) ; disp( char(10) ) ; 105 | 106 | 107 | %% Building the model 108 | % The Bagged Decission Tree builds an ensemble with a fixed Number Of 109 | % Deicission Trees (NODT). The ensemble is generated for the whole dataset and the Out-Of-Bag (OOB) 110 | % infromation is stored for evaluation purposes. 111 | tic ; disp( [' - Building the model with ',num2str(NoDT),' trees...'] ) ; 112 | dbt = TreeBagger( NoDT,data,classes_names,'names',genes,'method','classification','NVarToSample','all','oobvarimp','on','oobpred','on','Prior',classes_prior ) ; 113 | fprintf(' ( +%0.2f s ) done!',toc) ; disp( char(10) ) ; 114 | 115 | 116 | %% Biased evaluation of the model 117 | % This is a first test of the model, consisting of the prediction the 118 | % classes of the same dataset used for the trainning. This is a biased 119 | % evaluation that is not significant. 120 | [ predicted_classes predicted_scores ] = predict( dbt,data ) ; 121 | % First, we plot the scores of all the predicted classes for each sample. 122 | % The color key corresponds to the actual class of each sample. 123 | figure(1) ; set(1,'WindowStyle','docked') ; clf ; 124 | bp = nan(size(predicted_scores)) ; 125 | colors = hsv(K+1) ; 126 | h = [] ; 127 | for k = 1:K 128 | indexes = classes_keys == k ; 129 | bp(indexes,k) = predicted_scores(indexes,k) ; 130 | end%for 131 | subplot(2,1,1) ; cla ; 132 | hold on ; 133 | boxplot(bp,'Colors',colors) ; 134 | hold off ; 135 | grid on ; 136 | xlim([1 K]) ; xlabel( 'Classes' ) ; 137 | ylim([0 1]) ; ylabel( 'Scores' ) ; 138 | title('Scores of predicted classes (biased evaluation).') ; 139 | set(gca,'XTick',[1:K]) ; 140 | set(gca,'XTickLabel',classes_unique) ; 141 | % Second, we compute the confusion matrix (CM). The main diagonal of the 142 | % CM holds the number of correct classified samples. Otherwise, the 143 | % elements out of the main diagonal denotes wrongly classified samples. 144 | [ cm cm_labels ] = confusionmat( classes_names,predicted_classes,'order',classes_unique ) ; 145 | % For a full inspection of the matrix, use the next command. 146 | disp( dataset({cm,cm_labels{:}},'obsnames',cm_labels) ) ; 147 | % Alternatively, use a stacked-bar plot to visualize the proportions of 148 | % predicted classes for each class. 149 | subplot(2,1,2) ; cla ; 150 | hold on ; 151 | bar( cm,'stacked' ) ; 152 | hold off ; 153 | grid on ; 154 | colormap( colors ) ; 155 | xlabel( 'Classes' ) ; xlim([0 K]+0.5) ; 156 | ylabel( 'Number of samples' ) ; 157 | title('Fraction of predicted classes versus the actual ones (biased evaluation).') ; 158 | legend( cm_labels,'EdgeColor',[1 1 1],'Location','NO','Orientation','horizontal' ) ; 159 | set(gca,'XTick',[1:K]) ; 160 | set(gca,'XTickLabel',cm_labels) ; 161 | 162 | 163 | %% Evaluating the model with the OOB samples 164 | % This evaluation takes into account the out-of-bag (OOB) samples, that 165 | % have been not considered to build the model. 166 | [ predicted_classes predicted_scores ] = oobPredict( dbt ) ; 167 | figure(2) ; set(2,'WindowStyle','docked') ; cla ; 168 | bp = nan(size(predicted_scores)) ; 169 | colors = hsv(K+1) ; 170 | h = [] ; 171 | hold on ; 172 | for k = 1:K 173 | indexes = classes_keys == k ; 174 | bp(indexes,k) = predicted_scores(indexes,k) ; 175 | end%for 176 | subplot(2,1,1) ; 177 | hold on ; 178 | boxplot(bp,'Colors',colors) ; 179 | hold off ; 180 | grid on ; 181 | xlim([1 K]) ; xlabel( 'Classes' ) ; 182 | ylim([0 1]) ; ylabel( 'Scores' ) ; 183 | title('Scores of predicted classes (OOB evaluation).') ; 184 | set(gca,'XTick',[1:K]) ; 185 | set(gca,'XTickLabel',classes_unique) ; 186 | [ cm cm_labels ] = confusionmat( classes_names,predicted_classes,'order',classes_unique ) ; 187 | disp( dataset({cm,cm_labels{:}},'obsnames',cm_labels) ) ; 188 | subplot(2,1,2) ; cla ; 189 | hold on ; 190 | bar( cm,'stacked' ) ; 191 | hold off ; 192 | grid on ; 193 | colormap( colors ) ; 194 | xlabel( 'Classes' ) ; xlim([0 K]+0.5) ; 195 | ylabel( 'Number of samples' ) ; 196 | title('Fraction of predicted classes versus the actual ones (OOB evaluation).') ; 197 | legend( cm_labels,'EdgeColor',[1 1 1],'Location','NO','Orientation','horizontal' ) ; 198 | set(gca,'XTick',[1:K]) ; 199 | set(gca,'XTickLabel',cm_labels) ; 200 | 201 | 202 | %% Examining the errors of the individual models 203 | % To test the model objectively we use the OOB error (its missclasication 204 | % probability) and its margin (the difference between the score for the 205 | % actual class and the largest one for other classes) for each 206 | % individual tree and theirs cumulative values for the emsembled model. 207 | figure(3) ; set(3,'WindowStyle','docked') ; cla ; 208 | subplot(2,1,1) ; cla ; 209 | hold on ; 210 | plot( oobError(dbt,'mode','individual'),'ro','Color',[1 0.2 0] ) ; 211 | curve=smooth(oobError(dbt,'mode','cumulative')) ; 212 | plot( curve,'r-','Color',[1 0.2 0] ) ; 213 | index=find(abs(diff(curve))<0.001*max(curve(:)),1) ; 214 | plot( [1,NoDT],curve(index)*[1 1],'r--','Color',[1 0.2 0] ) ; 215 | hold off ; 216 | grid on ; 217 | xlabel( 'Number of trees in the ensemble' ) ; xlim([1 NoDT]) ; 218 | ylabel( 'Misclassification probability' ) ; ylim([0 1]) ; 219 | title( 'Missclassification probability for the OOB samples using an incremental ensembling.' ) ; 220 | legend( {'Individual';'Cumulative';'Steady level'},'EdgeColor',[1 1 1],'Location','NE','Orientation','horizontal' ) ; 221 | % The margin can be considered as a confidence interval of the score. The 222 | % highest the margin, the bigger the confidence on the predicted class. 223 | subplot(2,1,2) ; cla ; 224 | hold on ; 225 | plot( oobMeanMargin(dbt,'mode','individual'),'bo','Color',[0 0.6 1] ) ; 226 | curve=smooth(oobMeanMargin(dbt,'mode','cumulative')) ; 227 | plot( curve,'r-','Color',[0 0.6 1] ) ; 228 | index=find(abs(diff(curve))<0.001*max(curve(:)),1) ; 229 | plot( [1,NoDT],curve(index)*[1 1],'r--','Color',[0 0.6 1] ) ; 230 | hold off ; 231 | grid on ; 232 | xlabel( 'Number of trees in the ensemble' ) ; xlim([1 NoDT]) ; 233 | ylabel( 'Margin' ) ; ylim([0 1]) ; 234 | title( 'Mean of the margin for the OOB samples using an incremental ensembling.' ) ; 235 | legend( {'Individual';'Cumulative';'Steady level'},'EdgeColor',[1 1 1],'Location','NE','Orientation','horizontal' ) ; 236 | 237 | 238 | %% Examining the correlation among the predicted classes 239 | % The proximitry matrix is defined as the fraction of trees in the ensemble 240 | % for which any two observations land on the same leaf. 241 | dbt = fillProximities( dbt ) ; 242 | hold on ; 243 | HeatMap( dbt.Proximity,'ColumnLabels',classes_names,'RowLabels',classes_names,'Colormap',redgreencmap(20) ) ; 244 | hold off ; 245 | title('Proximity matrix.') ; 246 | 247 | 248 | %% Examining the confidence of the invidual variables 249 | % The relevance of each gene on the emsenble may be computed as the 250 | % predictor importance. The predictor importance averages the changes in 251 | % the risk due to split on every predictor at each node for the whole 252 | % ensemble. This risk depends on the seleted split criterion (typically 253 | % GDI that measure the impurity of the node). "DeltaCritDecisionSplit" 254 | % measure the changes in the split criterion summed over splits on each 255 | % variable, averaged across the entire ensemble. 256 | [ sorted_improvement_criteria sorted_improvement_keys ] = sort( dbt.DeltaCritDecisionSplit,'descend' ) ; 257 | figure(4) ; set(4,'WindowStyle','docked') ; cla ; 258 | hold on ; 259 | bar( sorted_improvement_criteria,'FaceColor',[0 0.6 1],'EdgeColor',[0 0.4 0.6] ) ; 260 | hold off ; 261 | grid on ; 262 | xlabel( 'Genes' ) ; xlim([0 G]+0.5) ; 263 | ylabel( 'Changes in the split criterion' ) ; 264 | title('Predictor improvement in the split criterion (descending sorted).') ; 265 | set( gca,'XTick',[1:G] ) ; 266 | set( gca,'XTickLabel',genes(sorted_improvement_keys) ) ; 267 | 268 | 269 | %% Examining the errors of the individual variables 270 | % Alternaitvely, the relevance of each variable may be computed by 271 | % "OOBPermutedVarDeltaError". This variable measures the increase in the 272 | % OOB prediction error if the values of that variables are permutted for 273 | % every tree, then averaged over the entire ensemble and lastly divided by 274 | % the standard deviation. 275 | [ sorted_error_criteria sorted_error_keys ] = sort( dbt.OOBPermutedVarDeltaError,'descend' ) ; 276 | figure(5) ; set(5,'WindowStyle','docked') ; cla ; 277 | hold on ; 278 | bar( sorted_error_criteria,'FaceColor',[0 0.6 1],'EdgeColor',[0 0.4 0.8] ) ; 279 | hold off ; 280 | grid on ; 281 | xlabel( 'Genes' ) ; xlim([0 G]+0.5) ; 282 | ylabel( 'Effect on the prediction error' ) ; 283 | title( 'Predictor improvement in the OOB error (descending sorted).' ) ; 284 | legend( {'Error rate'},'EdgeColor',[1 1 1],'Location','NE' ) ; 285 | set(gca,'XTick',[1:G]) ; 286 | set(gca,'XTickLabel',genes(sorted_error_keys)) ; 287 | 288 | 289 | %% Plotting the performance curves 290 | figure(6) ; set(6,'WindowStyle','docked') ; cla ; 291 | text_legend = [] ; 292 | hold on ; 293 | for k = 1:K 294 | [ fpr tpr threshold AUC(k) ] = perfcurve( classes_names,predicted_scores(:,k),classes_unique{k} ) ; 295 | plot(fpr,tpr,'Color',colors(k,:)) ; 296 | text_legend = [ text_legend ; {[classes_unique{k},' (',num2str(AUC(k)),')']} ] ; 297 | end%for 298 | plot([0 1],[0 1],'g--','Color',[1 1 1]*0.5) 299 | hold off ; 300 | grid on ; 301 | legend( [ text_legend(:) ; 'ND line' ] ,'EdgeColor',[1 1 1],'Location','SE' ) ; 302 | title('ROC curve (TPR and FPR trade off).') ; 303 | xlabel( '1-Specificity (FPR)' ) ; xlim([0 1]) ; 304 | ylabel( 'Sensitivity (TPR)' ) ; ylim([0 1]) ; 305 | figure(7) ; set(7,'WindowStyle','docked') ; cla ; 306 | text_legend = [] ; 307 | hold on ; 308 | for k = 1:K 309 | [ ppv tpr threshold AUC(k) ] = perfcurve( classes_names,predicted_scores(:,k),classes_unique{k},'xcrit','ppv' ) ; 310 | plot(tpr,ppv,'Color',colors(k,:)) ; 311 | text_legend = [ text_legend ; {[classes_unique{k},' (',num2str(AUC(k)),')']} ] ; 312 | end%for 313 | hold off ; 314 | grid on ; 315 | legend( [ text_legend(:) ] ,'EdgeColor',[1 1 1],'Location','SW' ) ; 316 | title('PR curve (PPV and TPR trade off).') ; 317 | xlabel( 'Recall (TPR)' ) ; xlim([0 1]) ; 318 | ylabel( 'Precission (PPV)' ) ; ylim([0 1]) ; 319 | 320 | 321 | %% Plotting the tree and loading super cells 322 | % Plotting the embedded tree 323 | view(dbt.Trees{:},'mode','graph') 324 | % Tracking a subset of cells along the tree 325 | choice = questdlg(['Do you want to track a superclass along the tree?'],'Track Superclass','Yes','No','Yes'); 326 | switch choice 327 | case 'Yes' 328 | % Data should be provided in a column TXT file with no header. 329 | tic ; disp( [' - Loading data...'] ) ; disp( char(10) ) ; 330 | [ input_file_super,input_path_super ] = uigetfile( {'*.txt','One column text format (*.txt)'},'MultiSelect','off','Select File to Open',input_path ) ; 331 | super_samples = readtable( [input_path_super,input_file_super],'Delimiter',',','ReadVariableNames',false ) ; 332 | super_samples = super_samples{:,1} ; 333 | indexes = zeros(N,1) ; 334 | for k = 1:size(super_samples(:),1) 335 | indexes = indexes + strcmp( samples,super_samples(k) ) ; 336 | end%for 337 | super_indexes = indexes == 1 ; 338 | import bioma.data.* 339 | dm = DataMatrix( data(super_indexes,:),samples(super_indexes),genes ) ; 340 | super_classes = classes_names(super_indexes) ; 341 | super_classes_uinque = unique(sort(super_classes)) ; 342 | colors = hsv( size(super_classes_uinque(:),1) ) ; 343 | markers = { 'o' ; 's' ; 't' ; 'x' ; 'h' ; 'p' }' ; 344 | %dm = DataMatrix(data,classes_names,genes) ; 345 | embedded = dbt.Trees{:} ; 346 | node = 1 ; 347 | leave = 1 ; 348 | splitting_variables = {} ; 349 | splitting_values = [] ; 350 | parents = ones(size(dm,1),1) ; 351 | tree = [ 0 ] ; 352 | family = parents(:)' ; 353 | [ tree , family , splitting_variables , splitting_values ] = growtree( dm,embedded,node,leave,parents,tree,family,splitting_variables,splitting_values ) ; 354 | tree = tree(:)' ; 355 | count = size(tree,2) ; 356 | [ x , y ] = treelayout( tree ) ; 357 | figure(8) ; cla ; hold on ; xlim([0 1]) ; ylim([0 1]) ; 358 | h=[] ; legend_text = [] ; 359 | for k = 1:size(super_classes_uinque(:),1) 360 | legend_text = [ legend_text ; super_classes_uinque(k) ] ; 361 | h(k) = plot( 2,2,'k.-','Color',colors(k,:) ) ; 362 | end%for 363 | for k = 1:1:size(splitting_variables(:),1) 364 | if sum( tree == k ) > 0 365 | indexes2 = find( tree==k ) ; 366 | for j=1:size(indexes2(:),1) 367 | plot([x(k) x(indexes2(j))],[y(k) y(indexes2(j))],'k--','Color',[1 1 1]*0.5) ; 368 | end%if 369 | if sum( tree == k ) == 2 370 | text( -0.01+x(k),0.02+y(k),splitting_variables(k) ) ; 371 | population = [] ; 372 | for i=1:size(super_classes_uinque(:),1) 373 | population = [ population ; sum( family(k,:).*strcmp(super_classes,super_classes_uinque(i))' ) ] ; 374 | end%for 375 | for i=1:size(population(:),1) 376 | if sum( population(i) ) > 0 377 | plot( x(k)+0.005*i-0.005*size(super_classes_uinque(:),1)/1.75,y(k),'ro--','Color',colors(i,:),'MarkerSize',50*population(i)/size(super_classes,1) ) ; 378 | end%if 379 | end%for 380 | end%if 381 | else 382 | %plot(x(k),y(k),'r.') ; 383 | population = [] ; 384 | for i=1:size(super_classes_uinque(:),1) 385 | population = [ population ; sum( family(k,:).*strcmp(super_classes,super_classes_uinque(i))' ) ] ; 386 | if population(i) > 0 387 | plot( x(k),y(k)+0.005*i-0.005*size(super_classes_uinque(:),1)/1.75,'ro--','Color',colors(i,:),'MarkerSize',50*population(i)/size(super_classes,1) ) ; 388 | end%if 389 | end%for 390 | end%if 391 | drawnow ; 392 | end%for 393 | hold off ; 394 | legend( h(:),legend_text,'EdgeColor',[1 1 1],'Location','NE' ) ; set(gca,'XTick',[]) ; set(gca,'YTick',[]) ; 395 | end%switch 396 | 397 | set(8,'WindowStyle','docked') ; 398 | 399 | % http://stackoverflow.com/questions/5065051/add-node-numbers-get-node-locations-from-matlabs-treeplot 400 | 401 | end%function %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 402 | 403 | 404 | function [ tree , family , splitting_variables , splitting_values ] = growtree( dm,embedded,node,leave,parents,tree,family,splitting_variables,splitting_values ) 405 | 406 | if ~( strcmp(embedded.CutVar(leave),'') ) 407 | c1 = ( parents.*( dm( :,embedded.CutVar(leave) ) < embedded.CutPoint(leave) ) ) == 1 ; 408 | node1 = 0 ; 409 | c2 = ( parents.*( c1 == 0 ) ) == 1 ; 410 | node2 = 0 ; 411 | if sum( c1 ) >= 2 % minimun number of children at last leave 412 | tree = [ tree(:) ; node ] ; 413 | family = [ family ; c1(:)' ] ; 414 | node1 = size(tree(:),1) ; 415 | splitting_variables = [ splitting_variables ; embedded.CutVar(leave) ] ; 416 | splitting_values = [ splitting_values ; embedded.CutPoint(leave) ] ; 417 | [ tree , family , splitting_variables , splitting_values ] = growtree( dm,embedded,node1,embedded.Children(leave,1),c1,tree,family,splitting_variables,splitting_values ) ; 418 | end%if 419 | if sum( c2 ) >= 2 % minimun number of children at last leave 420 | tree = [ tree(:) ; node ] ; 421 | family = [ family ; c2(:)' ] ; 422 | node2 = size(tree(:),1) ; 423 | splitting_variables = [ splitting_variables ; embedded.CutVar(leave) ] ; 424 | splitting_values = [ splitting_values ; embedded.CutPoint(leave) ] ; 425 | [ tree , family , splitting_variables , splitting_values ] = growtree( dm,embedded,node2,embedded.Children(leave,2),c2,tree,family,splitting_variables,splitting_values ) ; 426 | end%if 427 | end%if 428 | 429 | end%function 430 | 431 | 432 | -------------------------------------------------------------------------------- /Examples/projection__GMM_clustering_with_6_modes.csv: -------------------------------------------------------------------------------- 1 | Actual_class,x,y,GMM_classification_result 2 | class1,3.5367003124,2.3777537586,1 3 | class1,2.314274775,1.4866495221,1 4 | class1,2.3672278221,2.2648840876,1 5 | class1,2.9737178559,2.2268577697,1 6 | class1,2.4775907019,2.4729878799,1 7 | class1,4.0415395074,1.8182515967,1 8 | class1,2.9584514572,2.3009193596,1 9 | class1,1.8149548283,2.1627303391,1 10 | class1,4.2111162992,3.112512198,6 11 | class1,1.6584260241,2.4482323048,1 12 | class1,2.6611742183,1.7518964639,1 13 | class1,3.7464414244,1.681018595,1 14 | class1,3.6893018063,2.1140542315,1 15 | class1,1.8797340577,2.379102547,1 16 | class1,3.1477030574,1.8982554783,1 17 | class1,2.7806473133,1.6170245322,1 18 | class1,2.3130965059,2.8269454173,5 19 | class1,2.9548676316,1.9895783362,1 20 | class1,3.5578098552,1.096929638,1 21 | class1,4.7309866226,0.9086226256,2 22 | class1,2.2897347962,2.1737321696,1 23 | class1,3.4725478002,1.8155874508,1 24 | class1,2.6946054304,2.5398825214,1 25 | class1,1.2769382019,2.0860694912,1 26 | class1,1.9261978486,2.124211775,1 27 | class1,3.0347489936,2.4836434215,1 28 | class1,3.2252156056,1.6583354024,1 29 | class1,4.0521610467,2.0396571656,1 30 | class1,3.9258237916,2.1880455783,1 31 | class1,2.3134076617,2.3819764408,1 32 | class1,2.477307089,2.9469207459,5 33 | class1,2.5953957115,2.2277298624,1 34 | class1,2.6622732518,1.6721426962,1 35 | class1,2.9555962735,1.8725971342,1 36 | class1,2.9964596855,1.630862359,1 37 | class1,2.6796500642,2.3999546524,1 38 | class1,2.5790404686,2.0314172714,1 39 | class1,3.9372098049,1.1204088868,6 40 | class1,3.0149521806,2.2647577632,1 41 | class1,3.9789202022,2.2058531692,1 42 | class1,3.0580147739,2.7086505216,1 43 | class1,2.0115054302,1.9846239612,1 44 | class1,3.8321817789,1.9378469148,1 45 | class1,1.5502022847,2.2464823248,1 46 | class1,5.1331629523,2.4892650758,1 47 | class1,2.1321087666,1.7330042637,1 48 | class1,3.5704755119,1.1637263347,1 49 | class1,3.0653944574,2.4304441207,1 50 | class1,3.6538000533,1.220310604,1 51 | class1,2.9905826043,2.0687314881,1 52 | class1,2.1695557729,2.3157583631,1 53 | class1,2.7744110704,2.0621202412,1 54 | class1,2.349951946,2.5356741812,1 55 | class1,2.3928362249,1.8807344974,1 56 | class1,3.2538649385,1.818463093,1 57 | class1,3.6576863729,1.8852671523,1 58 | class1,3.3651462404,1.6231835246,1 59 | class1,1.2477887689,2.539452954,1 60 | class1,1.384466278,1.9930489773,1 61 | class1,1.8050433762,2.207962328,1 62 | class1,3.777291418,2.017888207,1 63 | class1,4.9625924964,2.9842387917,1 64 | class1,3.6382318811,2.3893708208,1 65 | class1,2.7498440354,1.9946391586,1 66 | class1,2.628659451,2.9028647196,5 67 | class1,2.0108783396,1.9973193898,1 68 | class1,0.6799828939,2.1885936127,1 69 | class1,2.4013986051,1.8620286639,1 70 | class1,4.3538111357,2.0919496817,1 71 | class1,3.8336578239,1.5223229741,1 72 | class1,4.5352022642,2.6899980818,1 73 | class1,5.14059728,2.4613773797,1 74 | class1,3.7564098035,2.4105775766,1 75 | class1,1.4801567105,2.3425838846,1 76 | class1,1.3531769433,2.3165523642,1 77 | class1,4.7466371735,2.2706348187,1 78 | class1,3.6561210993,1.6791291865,1 79 | class1,3.8077383982,1.5685341065,1 80 | class1,4.1380553758,0.878969758,2 81 | class1,3.1192063862,2.2990561372,1 82 | class1,3.9903410647,1.9123608982,1 83 | class1,4.2249929543,1.767971814,1 84 | class1,2.411281569,2.2893653597,1 85 | class1,2.047555233,3.6622813173,5 86 | class1,2.7158576432,1.1497927592,1 87 | class1,2.3524648313,1.0916661173,1 88 | class1,2.3580510575,1.6684453796,1 89 | class1,0.3813753763,1.8556978833,1 90 | class1,2.9899038226,1.2973449441,1 91 | class1,2.3954119155,1.0098997858,1 92 | class1,2.1214580552,1.2387766369,1 93 | class1,3.7941886081,2.5843511054,1 94 | class1,2.4409013413,1.4035859805,1 95 | class1,2.230712742,1.6338940819,1 96 | class1,3.6399937955,1.3370279125,1 97 | class1,2.9430741276,2.637943609,1 98 | class1,3.5373954267,1.4639449928,1 99 | class1,2.9518891427,1.7649640941,1 100 | class1,1.2852369408,0.8443333599,1 101 | class1,3.0409076478,2.2031585717,1 102 | class1,3.0407267375,1.7524105509,1 103 | class1,3.0952905917,1.9809259314,1 104 | class1,2.9019319152,3.4281441988,5 105 | class1,3.4667309996,1.5198953832,1 106 | class1,2.6035165378,2.828126209,1 107 | class1,2.3414859402,1.9435285958,1 108 | class1,1.162326133,2.8376658747,5 109 | class1,3.8923147778,1.6251129871,1 110 | class1,1.9309875966,3.1993063006,5 111 | class1,1.9314065374,1.2360932254,1 112 | class1,2.0407462231,2.5586295693,1 113 | class1,1.0451162598,2.3658041535,1 114 | class1,4.0317347401,1.7580586339,1 115 | class1,3.1856763741,2.2546620625,1 116 | class1,4.005250884,3.0459284438,6 117 | class1,3.4011686814,2.0095244149,1 118 | class1,3.3853270101,2.5752010321,1 119 | class1,0.9619343082,2.4036584926,1 120 | class1,2.6173734763,1.366289723,1 121 | class1,3.9077366236,1.4573271721,1 122 | class1,0.2737261633,2.2580441283,1 123 | class1,2.2240997009,1.3396078427,1 124 | class1,2.5902086591,1.7090277262,1 125 | class1,1.1741358221,1.9976887304,1 126 | class1,4.2576809205,1.4262176946,1 127 | class1,1.5536444012,2.5661166471,1 128 | class1,1.9437570451,2.1316531676,1 129 | class1,2.5772929319,1.7199372486,1 130 | class1,1.8215977256,2.0219021989,1 131 | class1,1.6708550086,1.7377661288,1 132 | class1,4.5983659267,2.0417257413,1 133 | class1,3.3567443298,2.8629525667,1 134 | class1,4.0843390852,0.9161720333,2 135 | class1,2.3330230699,1.1033846523,1 136 | class1,4.6267453999,1.9156182682,1 137 | class1,3.327585668,2.3139556269,1 138 | class1,4.3525226374,1.9292923904,1 139 | class1,2.1768946581,2.2703768709,1 140 | class1,3.4027549134,1.9107241867,1 141 | class1,2.8593576622,1.4528966571,1 142 | class1,2.2979516349,1.9111681185,1 143 | class1,4.2358783379,2.4736023252,1 144 | class1,3.8582642111,2.3744551936,1 145 | class1,3.1714970039,2.1115630768,1 146 | class1,3.9021353071,1.5807728532,1 147 | class1,2.0609759956,2.1638011331,1 148 | class1,2.6057270065,1.9074919424,1 149 | class1,3.0950753227,1.6442498726,1 150 | class1,2.6791428439,1.6923324331,1 151 | class1,1.4980684956,3.0916920987,5 152 | class1,3.6076088159,2.6474824074,1 153 | class1,3.8470701233,2.3094222592,1 154 | class1,3.3481795405,2.6482756386,1 155 | class1,2.795776065,2.1220124534,1 156 | class1,3.5783861034,1.3971353938,1 157 | class1,2.3267988433,1.5775433483,1 158 | class1,3.914737552,0.9153280352,6 159 | class1,4.8446029695,1.8336629572,1 160 | class1,4.9035939726,2.3477510088,1 161 | class1,2.816981157,1.6852369602,1 162 | class1,1.9372874656,1.7370882659,1 163 | class1,1.8001486495,2.1616705918,1 164 | class1,3.6524384869,1.7146492365,1 165 | class1,4.0077176507,1.3479846797,1 166 | class1,3.5808495776,1.6411083693,1 167 | class1,2.1280838666,2.2368825201,1 168 | class1,2.0667419359,1.4873663151,1 169 | class1,4.715082565,2.2201180129,1 170 | class1,2.9267219095,2.1560944427,1 171 | class1,3.3035537105,2.5219402112,1 172 | class1,5.0136280479,2.0469634857,1 173 | class1,3.5088392241,2.4959632758,1 174 | class1,1.8205131694,1.7307074143,1 175 | class1,1.7147260117,2.4969275648,1 176 | class1,4.1762923179,2.1928382813,1 177 | class1,2.9515317697,1.184859239,1 178 | class1,2.961660177,2.557213845,1 179 | class1,3.1974969771,1.9314106972,1 180 | class1,4.8191182294,1.4791730458,1 181 | class1,2.9101397197,2.30617211,1 182 | class1,0.5284994982,2.2295190295,1 183 | class1,3.2318986913,2.1652682367,1 184 | class1,2.9240871749,1.7575794343,1 185 | class1,1.7337553677,2.3304095675,1 186 | class1,1.3868681684,1.3311752657,1 187 | class1,1.6952830184,1.6853270528,1 188 | class1,2.2396181501,2.8793500689,5 189 | class1,5.0755187675,1.8158076217,1 190 | class1,2.8476928932,2.6326879667,1 191 | class1,2.8166101249,2.1516964774,1 192 | class1,2.8891141438,1.7240605992,1 193 | class1,2.1677249458,1.8425514098,1 194 | class1,4.5659486584,1.9865708928,1 195 | class1,3.2930028988,1.7470039932,1 196 | class1,3.2261624426,2.7378661711,1 197 | class1,1.8969048388,1.5526229658,1 198 | class1,2.623426815,1.4637606821,1 199 | class1,2.92847172,2.2256497259,1 200 | class1,2.7999045552,2.2161873839,1 201 | class1,2.5154985179,2.647793517,1 202 | class1,3.7403355009,0.685901978,2 203 | class1,3.6328040691,1.9114821585,1 204 | class1,1.6556362426,2.1806603656,1 205 | class1,3.9219556755,1.5370725771,1 206 | class1,2.401505203,1.7123573714,1 207 | class1,2.2727488507,2.3526646221,1 208 | class1,2.2918326513,2.3133225296,1 209 | class1,4.0450597473,2.1416316918,1 210 | class1,3.3705887045,1.2588151004,1 211 | class1,1.8445812876,2.3172768477,1 212 | class1,2.1926869908,2.1193090704,1 213 | class1,4.0276122069,2.839680699,1 214 | class1,3.0537536201,2.3503147715,1 215 | class1,3.8637620192,1.3458045963,1 216 | class1,4.1315176689,2.3185362651,1 217 | class1,3.1343110758,1.95410514,1 218 | class1,2.9827633304,1.9717856313,1 219 | class1,2.6833477723,2.0205392633,1 220 | class1,2.9605610322,1.8720214726,1 221 | class1,3.3108634802,1.7900341601,1 222 | class1,4.0874670533,1.600226041,1 223 | class1,3.0312410615,1.1346669218,1 224 | class1,2.2726148121,2.3692608126,1 225 | class1,2.9845141141,1.0233384006,1 226 | class1,-0.0833214943,2.8766223905,5 227 | class1,-0.1153505948,1.6823411973,1 228 | class1,3.2916388609,1.8902410691,1 229 | class1,2.6580162998,1.7816165971,1 230 | class1,3.4341686331,2.178493437,1 231 | class1,1.6716227181,1.9900950313,1 232 | class1,2.2103296747,1.300240369,1 233 | class1,3.9756605886,0.8380164838,2 234 | class1,3.9977010138,1.8803353416,1 235 | class1,1.2677591952,1.9282679936,1 236 | class1,1.5489204226,2.7341233982,5 237 | class1,4.3536640402,1.7865844236,1 238 | class1,4.2778787722,2.136796911,1 239 | class1,5.3325298638,2.3085698298,1 240 | class1,3.5035245271,1.2904782683,1 241 | class1,3.9944253346,2.367923651,1 242 | class1,2.9663405204,1.9305464574,1 243 | class1,3.2940323522,1.3953172901,1 244 | class1,3.3853264064,1.9382822386,1 245 | class1,1.5013523969,1.7539317459,1 246 | class1,3.9158883776,3.119283322,6 247 | class1,2.9604680539,1.8514201649,1 248 | class1,3.266318364,2.3387319506,1 249 | class1,3.6946251975,2.5845936159,1 250 | class1,3.650166225,2.6937361381,1 251 | class1,0.7839698886,1.2574262835,1 252 | class1,2.1220789125,1.6655469474,1 253 | class1,3.2067010247,1.1525818371,1 254 | class1,3.3859384885,1.9617846086,1 255 | class1,3.1557323733,2.4282485065,1 256 | class1,1.8742747754,2.1492104407,1 257 | class1,3.0817656885,1.4591237597,1 258 | class1,2.0900565099,2.9137946419,5 259 | class1,4.6193159452,1.6953566955,1 260 | class1,3.6872567319,2.7147190031,1 261 | class1,2.8960810554,2.0038087139,1 262 | class1,3.8153162972,2.4954705196,1 263 | class1,3.1022987832,2.394448168,1 264 | class1,2.658627483,3.6520926041,5 265 | class1,2.2913682024,2.0686386491,1 266 | class1,1.9142174843,1.6653604727,1 267 | class1,2.4712862323,2.6369339967,1 268 | class1,3.7974629788,1.8409901934,1 269 | class1,1.1115489984,1.7978024826,1 270 | class1,3.5700521425,1.8699994883,1 271 | class1,0.6736782999,1.8920930398,1 272 | class1,2.9659943298,2.1879341034,1 273 | class1,2.6230584018,2.4324068219,1 274 | class1,3.9054338928,1.4455792634,1 275 | class1,3.2902101528,2.3824012946,1 276 | class1,5.2797573689,1.5415439617,1 277 | class1,3.3391818176,1.5596319276,1 278 | class1,3.155403169,0.4120359836,6 279 | class1,3.0158103432,2.0987185587,1 280 | class1,3.4156887455,2.4504861156,1 281 | class1,1.8519353089,2.0371916294,1 282 | class1,2.9555421588,2.0446370782,1 283 | class1,2.6482197405,1.9946051282,1 284 | class1,5.1609015816,2.3545079882,1 285 | class1,4.2589540332,2.3898562903,1 286 | class1,2.6289720894,2.1625447767,1 287 | class1,3.7200900494,2.0031467751,1 288 | class1,0.9817457468,1.2679166545,1 289 | class1,4.1465460944,2.3309453568,1 290 | class1,2.7223782621,1.3208502912,1 291 | class1,1.7490226486,1.7204634496,1 292 | class1,4.5870825093,1.4768444668,1 293 | class1,3.0197660338,2.2675764972,1 294 | class1,2.2385221069,1.3531815195,1 295 | class1,4.0679935548,1.8922604969,1 296 | class1,3.9785977434,2.2299298592,1 297 | class1,2.3669034377,2.5081664274,1 298 | class1,3.7812653253,1.6641822923,1 299 | class1,2.4520489037,2.0678937874,1 300 | class1,3.0601250794,1.6627949879,1 301 | class1,1.186992287,1.3776528688,1 302 | class1,2.2542460002,2.3992539448,1 303 | class1,3.1869812933,2.2043488997,1 304 | class1,3.8917907264,2.4477854019,1 305 | class1,2.6707824895,1.6743616225,1 306 | class1,3.6699339808,2.5280561071,1 307 | class1,2.9507774604,1.4135569628,1 308 | class1,2.1975234458,2.1653656753,1 309 | class1,4.2193370463,2.1929227935,1 310 | class1,4.2458103955,1.1413169441,1 311 | class1,3.3580078892,2.390281767,1 312 | class1,4.8505951615,2.807790554,1 313 | class1,3.0204771894,2.6197802495,1 314 | class1,4.4620566285,1.9790228702,1 315 | class1,3.2036801606,2.1395714012,1 316 | class1,3.8733509074,1.8311524311,1 317 | class1,4.2506565691,1.5471232706,1 318 | class1,3.6993105441,1.6775685607,1 319 | class1,3.7676880236,2.1826781271,1 320 | class1,4.7610567513,1.8912354673,1 321 | class1,1.9592078105,3.076552063,5 322 | class1,4.0130472959,2.2165645137,1 323 | class1,3.2165132973,2.2027597349,1 324 | class1,4.0875202075,1.8833670613,1 325 | class1,5.0505841919,1.962669994,1 326 | class1,2.949053719,1.5356139221,1 327 | class1,4.1357587022,2.6362925141,1 328 | class1,4.269632787,1.4840283115,1 329 | class1,2.9398656449,1.8070104747,1 330 | class1,1.8228752986,1.6725222989,1 331 | class1,3.5611570627,2.7972330107,1 332 | class1,3.2157337018,2.443246298,1 333 | class1,1.475589641,1.8730815804,1 334 | class1,3.1683562909,1.9836877748,1 335 | class1,3.071732358,2.2016441735,1 336 | class1,4.5058909165,1.7485537099,1 337 | class1,1.8327926252,1.6134238657,1 338 | class1,3.2990592786,2.4256862993,1 339 | class1,1.3602364087,2.2396422722,1 340 | class1,3.4250181362,2.2267175867,1 341 | class1,3.2572798332,2.6280281361,1 342 | class1,2.441819552,1.4542921655,1 343 | class1,1.9146971014,2.2950745962,1 344 | class1,1.7233175317,2.5798200279,1 345 | class1,3.0711571322,2.7311080897,1 346 | class1,0.9773409668,2.0808921956,1 347 | class1,4.1524543417,1.9533817215,1 348 | class1,1.6742505688,2.3706601644,1 349 | class1,1.9093595582,1.6170068742,1 350 | class1,4.0967202755,0.8508307133,2 351 | class1,4.1348869777,2.2119149886,1 352 | class1,2.1052514422,1.7949912374,1 353 | class1,3.6819658958,1.8585809855,1 354 | class1,2.3819942508,1.9113568234,1 355 | class1,4.2322747015,2.0865081517,1 356 | class1,3.9063257354,2.2430680463,1 357 | class1,2.2007335886,1.4857801057,1 358 | class1,3.2221532159,1.8371393662,1 359 | class1,3.2528141544,1.5510902955,1 360 | class1,3.9230137629,2.0421955041,1 361 | class1,3.6112266266,1.4650882478,1 362 | class1,2.9005852749,1.4409676729,1 363 | class1,4.2891413582,1.7726160402,1 364 | class1,3.244323921,2.0058593678,1 365 | class1,2.1539805999,1.5242014641,1 366 | class1,1.9482820587,1.9147131163,1 367 | class1,1.3195551514,1.761891684,1 368 | class1,4.164356736,2.3705624973,1 369 | class1,3.0033913071,2.3309145964,1 370 | class1,2.5578657892,2.6219470746,1 371 | class1,3.9221813896,1.1952413477,1 372 | class1,3.3226810917,1.287691858,1 373 | class1,1.4098515192,2.9817502028,5 374 | class1,3.6562466484,1.6837941559,1 375 | class1,4.0136515737,2.0451446833,1 376 | class1,3.144989222,2.3137780815,1 377 | class1,2.9996129979,1.9584827175,1 378 | class1,2.0833471724,1.255402004,1 379 | class1,3.8161272724,1.9644731659,1 380 | class1,1.5047581784,1.7540880885,1 381 | class1,2.6570486689,2.9756502911,5 382 | class1,1.638404572,2.8195047993,5 383 | class1,0.3750468608,2.1699039409,1 384 | class1,3.2594511259,1.6971175999,1 385 | class1,1.3207807966,2.0514645791,1 386 | class1,3.1524776771,2.1199706013,1 387 | class1,4.7418409187,1.4594978845,1 388 | class1,1.4577830819,2.4657760976,1 389 | class1,3.3591290881,1.9144578888,1 390 | class1,2.7239824206,1.290258023,1 391 | class1,2.0048123051,1.5008367163,1 392 | class1,3.9028878977,2.5588213021,1 393 | class1,4.7589293879,1.9594277004,1 394 | class1,2.5305490956,2.7237940573,1 395 | class1,3.2251715641,1.770202119,1 396 | class1,2.5547526827,2.0423184776,1 397 | class1,4.2066002253,0.9536574536,2 398 | class1,3.1093878063,2.1350666521,1 399 | class1,3.216473149,1.1410487895,1 400 | class1,4.2292913513,1.4727135123,1 401 | class1,3.9233296624,2.1797135086,1 402 | class1,2.3529434145,2.8246530281,5 403 | class1,1.9743517214,1.9209871765,1 404 | class1,4.5806026569,1.9990401206,1 405 | class1,2.7269191751,2.5996197376,1 406 | class1,1.0720933108,2.0815365973,1 407 | class1,2.3781808722,1.9498741455,1 408 | class1,2.7684683126,1.9248796771,1 409 | class1,3.4548086467,1.6449002746,1 410 | class1,2.3056830642,2.2280215725,1 411 | class1,0.9319190967,1.8742219074,1 412 | class1,4.0314307561,2.058814589,1 413 | class1,4.1636072823,2.7780830415,1 414 | class1,5.1779259912,1.5639368218,1 415 | class1,3.2697204125,1.7224693798,1 416 | class1,3.1507270565,2.2188418678,1 417 | class1,2.7113723771,2.2090622164,1 418 | class1,4.0082740822,2.1254667851,1 419 | class1,3.7526722693,2.8911284656,1 420 | class1,2.6858295207,1.5293959773,1 421 | class1,2.9527463615,1.8818648862,1 422 | class1,1.7746659205,1.7020491068,1 423 | class1,2.1018615805,1.5902674635,1 424 | class1,3.5393844397,1.8084722118,1 425 | class1,1.3447237688,2.9456682942,5 426 | class1,3.0225933802,1.6199416509,1 427 | class1,4.870217762,2.2142546178,1 428 | class1,3.8639082549,1.3650354024,1 429 | class1,3.3704138506,1.5659944691,1 430 | class1,3.5686967655,2.4478404974,1 431 | class1,3.3354459274,1.7223453626,1 432 | class1,2.7167426847,1.8397764911,1 433 | class1,1.3470409397,1.7072034043,1 434 | class1,2.7905771139,2.5610450277,1 435 | class1,4.2669059974,1.1133730266,2 436 | class1,3.1559548579,2.1112026157,1 437 | class1,1.6266462175,1.6647108615,1 438 | class1,2.0440708703,2.2443537128,1 439 | class1,2.0601363764,1.1858933922,1 440 | class1,5.6592048722,2.898874897,1 441 | class1,2.486228686,1.7953404545,1 442 | class1,4.3406640802,3.0196782234,1 443 | class1,1.9216457295,1.6639067443,1 444 | class1,3.3046093085,1.5253033867,1 445 | class1,1.6983274563,2.1506086944,1 446 | class1,3.7188063594,1.4987589437,1 447 | class1,2.3003203944,2.1512700429,1 448 | class1,2.2487704866,2.2210399864,1 449 | class1,4.22296188,2.2117860542,1 450 | class1,2.6085508551,2.0496849472,1 451 | class1,1.7968364593,1.9780529487,1 452 | class1,3.1110108915,1.6218341928,1 453 | class1,2.2271088951,1.6688816721,1 454 | class1,4.7853470498,2.8096245167,1 455 | class1,2.7594855962,0.945167633,1 456 | class1,2.9214644195,1.5084051904,1 457 | class1,1.6025058282,2.1543971853,1 458 | class1,5.4585126092,2.2238050427,1 459 | class1,2.9160671593,1.7485895651,1 460 | class1,2.1773803844,2.1421602847,1 461 | class1,0.5809686707,1.8599751517,1 462 | class1,2.1848188919,2.4633683337,1 463 | class1,3.8840877293,2.2015708185,1 464 | class1,3.00887109,1.7451598352,1 465 | class1,4.0175080573,0.867881272,2 466 | class1,1.2308391209,2.2067774956,1 467 | class1,3.6400316316,3.0285780105,1 468 | class1,2.0811369599,2.2487433405,1 469 | class1,3.1556548392,1.8503674436,1 470 | class1,4.5275142803,2.8202929856,1 471 | class1,3.6791373248,2.0673532994,1 472 | class1,3.266024639,2.8622159989,1 473 | class1,3.7769289194,2.1396543833,1 474 | class1,3.2243048167,2.3391727293,1 475 | class1,4.2999821498,2.8266979451,1 476 | class1,2.4713788392,2.38791754,1 477 | class1,1.5509652719,3.2324392506,5 478 | class1,3.1154606743,1.387121566,1 479 | class1,2.0309673432,1.3699642741,1 480 | class1,2.4804671574,2.6058881809,1 481 | class1,2.8244290713,1.7558257482,1 482 | class1,3.459262205,2.0267480131,1 483 | class1,4.1613804057,2.4876854117,1 484 | class1,4.1254921357,2.1450240035,1 485 | class1,4.2922123118,1.9629536363,1 486 | class1,4.6484403296,2.2180778149,1 487 | class1,1.6565740985,1.4976664832,1 488 | class1,3.5758666369,1.9760735892,1 489 | class1,3.2901393664,2.6259323938,1 490 | class1,0.7298393566,2.1710661679,1 491 | class1,4.2085055677,3.3437881206,6 492 | class1,2.3110488722,2.6055886093,1 493 | class1,2.6525209213,2.8737895135,1 494 | class1,2.4071834527,2.1112313352,1 495 | class1,2.1510846389,1.3856423622,1 496 | class1,2.7904045697,1.6648068519,1 497 | class1,5.4113290541,2.7586156101,1 498 | class1,2.5596077759,1.5002050854,1 499 | class1,3.1042680183,2.4463850323,1 500 | class1,3.7382171505,2.3072471455,1 501 | class1,3.0896739486,1.5051404571,1 502 | class1,2.6068312288,2.4866669679,1 503 | class1,2.9578287243,1.3955550558,1 504 | class1,3.5681814573,2.0904075557,1 505 | class1,4.204137507,1.5580802764,1 506 | class1,3.6294559824,2.1380714716,1 507 | class1,4.7761976413,1.9404356985,1 508 | class1,3.2327221797,1.2615939032,1 509 | class1,2.0653828368,2.5333570362,1 510 | class1,3.3485282783,2.5465592149,1 511 | class1,3.5409186482,2.213189605,1 512 | class1,2.8883497376,1.8359114862,1 513 | class1,3.4205055319,1.0542623409,1 514 | class1,4.063905713,1.5653209868,1 515 | class1,1.4755769814,2.1501686388,1 516 | class1,2.7696798611,2.0642343028,1 517 | class1,3.132503048,1.9784889694,1 518 | class1,3.6272784239,2.0742223517,1 519 | class1,1.7667692542,2.5824992662,1 520 | class1,2.9919209257,2.480059934,1 521 | class1,1.85422023,1.1842830819,1 522 | class1,3.7294050935,2.0015514983,1 523 | class1,1.8894166577,0.9881038174,1 524 | class1,3.7783992046,3.0026902304,1 525 | class1,2.3734318603,2.7891493836,5 526 | class1,2.5953149964,2.6300743243,1 527 | class1,2.4463719304,2.1491532383,1 528 | class1,3.0841094137,2.3644522489,1 529 | class1,2.508509779,1.8218763973,1 530 | class1,2.4709367857,2.5037983817,1 531 | class1,3.7902207991,1.8134016615,1 532 | class1,2.0454036292,1.2149223955,1 533 | class1,4.0381679419,2.453282642,1 534 | class1,4.0151335137,2.8090559974,1 535 | class1,2.9480471222,2.2860124181,1 536 | class1,3.4793261412,0.6597744879,6 537 | class1,3.4496233721,2.4732857386,1 538 | class1,1.8170330192,3.1468425928,5 539 | class1,5.509781116,0.9669811105,2 540 | class1,4.1173908785,2.7834851672,1 541 | class1,3.3266833801,2.5434277548,1 542 | class1,0.2665637251,1.5145796732,1 543 | class1,1.8978693725,1.6910881394,1 544 | class1,1.7335067197,0.8387561811,1 545 | class1,3.1505601537,3.2347879033,5 546 | class1,4.0055094233,1.4224349193,1 547 | class1,1.9596596217,2.0124851456,1 548 | class1,2.7103537443,1.8141677565,1 549 | class1,3.2025381897,2.1453211854,1 550 | class1,2.4021815536,2.0356068349,1 551 | class1,2.51375905,1.2972965179,1 552 | class1,3.3261379025,1.9960772793,1 553 | class1,3.4862555554,2.0003508784,1 554 | class1,5.7793840071,1.8107712733,1 555 | class1,4.1897952799,2.1474362055,1 556 | class1,4.1649988612,1.6284452572,1 557 | class1,3.4465066899,1.3984621249,1 558 | class1,4.3658806816,1.8294674472,1 559 | class1,1.6405534471,1.6713261741,1 560 | class1,3.5894188542,1.3499226824,1 561 | class1,3.4453190288,2.3570487132,1 562 | class1,2.3476512269,1.8357572973,1 563 | class1,3.6495713861,2.2461510213,1 564 | class1,3.9683260979,1.8251798605,1 565 | class1,2.4723486524,2.2101323868,1 566 | class1,4.8701859025,2.3142646304,1 567 | class1,3.2008239709,2.0279453742,1 568 | class1,2.4773451009,1.3859498851,1 569 | class1,3.2878673473,1.8489548263,1 570 | class1,1.6083448315,1.4902397931,1 571 | class1,2.3684272085,2.2432271872,1 572 | class1,2.639585325,1.7926808231,1 573 | class1,3.5545187383,1.6381526697,1 574 | class1,2.1398002588,2.2936974908,1 575 | class1,3.1025854665,2.4615377423,1 576 | class1,1.4024053707,1.4174617872,1 577 | class1,4.2775732748,1.98946702,1 578 | class1,4.1450525114,2.2651182155,1 579 | class1,3.6472903578,1.9613938007,1 580 | class1,1.9079522952,2.9277941319,5 581 | class1,4.3994805665,1.8658256107,1 582 | class1,2.9483580129,2.3010228707,1 583 | class1,1.7373744505,1.3946109604,1 584 | class1,3.3844833047,1.6510955594,1 585 | class1,4.3304863697,2.2197047755,1 586 | class1,2.4856804786,2.3280663594,1 587 | class1,4.0331352349,2.1471623443,1 588 | class1,3.5490955952,3.085877305,1 589 | class1,1.1416579353,1.7471131504,1 590 | class1,2.8812253262,1.7172856881,1 591 | class1,4.0389228727,2.5168197096,1 592 | class1,2.5234990035,1.5895287229,1 593 | class1,4.0985256347,3.1082636355,6 594 | class1,1.3472873397,1.7208650633,1 595 | class1,5.0943513226,1.8471465935,1 596 | class1,3.1311943005,2.5644014422,1 597 | class1,3.1951656299,1.6079851592,1 598 | class1,3.7294849991,2.4685598779,1 599 | class1,2.8593764688,2.3960569784,1 600 | class1,2.3233724489,1.4627254798,1 601 | class1,3.6703902884,2.4170048609,1 602 | class1,4.2624222391,2.1708808829,1 603 | class1,2.0610754178,1.722066652,1 604 | class1,3.6964589014,1.6846696091,1 605 | class1,3.6414848555,2.0095163683,1 606 | class1,2.8764938957,2.1216858249,1 607 | class1,3.7907362946,1.5867375705,1 608 | class1,2.8898133867,2.1579706938,1 609 | class1,3.9403341969,1.9384155145,1 610 | class1,1.8886995863,1.5802728092,1 611 | class1,0.8098407287,1.4911371897,1 612 | class1,3.1185920963,1.7183162739,1 613 | class1,2.6144041277,1.5975294909,1 614 | class1,1.9979356852,2.5362420038,1 615 | class1,2.6002473359,1.4316819919,1 616 | class1,4.4079725925,2.0666021016,1 617 | class1,3.9615640911,2.2602754797,1 618 | class1,4.4960291531,1.5155677056,1 619 | class1,2.0442400883,2.1843543588,1 620 | class1,4.3633508226,1.7584508261,1 621 | class1,1.5804453699,1.5585062952,1 622 | class1,3.0518033783,1.2696656535,1 623 | class1,2.3238396689,1.5251948998,1 624 | class1,3.638174235,2.8577682562,1 625 | class1,2.2094667248,1.2145002449,1 626 | class1,4.2712946656,1.6734580075,1 627 | class1,3.5162480772,1.4225709867,1 628 | class1,4.7876232749,2.380672293,1 629 | class1,4.5771534647,1.5409673076,1 630 | class1,0.7230150458,1.7781557201,1 631 | class1,2.2838177586,2.361342793,1 632 | class1,2.2722995703,2.4656057213,1 633 | class1,2.2277464019,1.4535833782,1 634 | class1,4.1827090729,1.9041248731,1 635 | class1,3.5757362357,2.1891403699,1 636 | class1,3.1755998696,1.9946201064,1 637 | class1,3.2371370069,2.934407842,1 638 | class1,3.1204055102,2.6474752779,1 639 | class1,2.3322630658,2.6665610521,1 640 | class1,3.1479403384,0.972993757,1 641 | class1,1.9977922175,1.8241707963,1 642 | class1,3.1264351105,1.8802052267,1 643 | class1,2.0233263041,1.4566506229,1 644 | class1,2.8109394368,1.6048241477,1 645 | class1,2.2435357872,2.362759718,1 646 | class1,4.0437676203,1.3014377637,1 647 | class1,1.862067665,2.5852179683,1 648 | class1,2.4809197945,2.8316601623,5 649 | class1,4.157122265,2.0066010636,1 650 | class1,3.7521224828,2.8989706268,1 651 | class1,1.8418381631,2.8034891659,5 652 | class1,2.5971693749,2.0393991962,1 653 | class1,3.0629127385,1.7999358126,1 654 | class1,2.6000622727,2.4260541136,1 655 | class1,3.1723239308,1.6677839717,1 656 | class1,2.6909289053,1.9118375852,1 657 | class1,2.5539409782,2.6003004251,1 658 | class1,3.1836605369,1.4947186892,1 659 | class1,3.6758390514,1.6512806954,1 660 | class1,3.8417936837,2.4389016341,1 661 | class1,3.7559222289,1.0810389512,6 662 | class1,2.4091732527,2.4653520204,1 663 | class1,3.3362847035,1.9523589794,1 664 | class1,1.9650928513,1.9260531667,1 665 | class1,2.8867342702,1.9230608042,1 666 | class1,1.4869077568,1.8061394666,1 667 | class1,4.2059903624,1.9721567209,1 668 | class1,3.051841801,1.7686875074,1 669 | class1,4.743001044,1.6056241025,1 670 | class1,3.7960108867,2.5047803639,1 671 | class1,2.6044753552,1.9983269827,1 672 | class1,3.2967164394,2.2284935247,1 673 | class1,3.2391899283,2.2825149509,1 674 | class1,3.6025427004,1.9135128212,1 675 | class1,3.6585763679,1.8205562266,1 676 | class1,3.1330083469,2.2154896443,1 677 | class1,2.5879919471,1.8484033521,1 678 | class1,4.5599993032,2.2593075626,1 679 | class1,3.4653745735,1.4553780229,1 680 | class1,3.7246987284,2.01452152,1 681 | class1,4.0686239642,2.0596574994,1 682 | class1,3.4332272186,2.6897160562,1 683 | class1,4.0040341617,2.8740455051,1 684 | class1,2.0522525725,1.8867341132,1 685 | class1,3.0788541176,1.6640167612,1 686 | class1,2.9659641504,1.4773146028,1 687 | class1,2.9065426774,1.7124093916,1 688 | class1,4.1200480637,2.0012886827,1 689 | class1,2.9975664444,1.3767789636,1 690 | class1,1.9097906319,1.761436399,1 691 | class1,3.3116893384,2.2756163168,1 692 | class1,3.6426110568,2.7124463263,1 693 | class1,3.4123295415,2.4909650035,1 694 | class1,2.8960417456,1.6825672014,1 695 | class1,2.4656638272,1.0004492564,1 696 | class1,3.1920095259,1.8008563629,1 697 | class1,2.0101388566,2.1746439806,1 698 | class1,4.1689062699,2.0250589096,1 699 | class1,2.5145042817,1.697422405,1 700 | class1,3.1554755119,1.7184416184,1 701 | class1,3.7687586292,2.2215354262,1 702 | class1,1.6890325796,2.6924554618,5 703 | class1,3.3421142627,2.3133697038,1 704 | class1,3.4105336731,0.9047311292,1 705 | class1,4.0106439721,1.5794032972,1 706 | class1,4.6314606931,1.4610300886,1 707 | class1,4.5980514827,1.5461361241,1 708 | class1,5.2909585017,2.6929006725,1 709 | class1,1.8436580979,2.181473894,1 710 | class1,2.2861346464,2.0119748163,1 711 | class1,3.382638038,1.9403128659,1 712 | class1,1.5707757161,1.0500224916,1 713 | class1,1.8184174013,1.8527152805,1 714 | class1,4.0578664585,1.6950480749,1 715 | class1,2.7714270125,1.918248116,1 716 | class1,3.4012411864,1.6019011146,1 717 | class1,2.8627610189,2.331006206,1 718 | class1,1.8668057984,1.8366085614,1 719 | class1,1.929057307,2.1257504115,1 720 | class1,3.8682989831,2.2892108934,1 721 | class1,4.495438541,2.0163720147,1 722 | class1,2.1995803398,2.0152284939,1 723 | class1,2.584497271,2.4562380893,1 724 | class1,3.5414877513,2.4646456741,1 725 | class1,2.6077115856,1.3678127348,1 726 | class1,3.0200901926,1.3640702647,1 727 | class1,0.204081853,2.6795572066,5 728 | class1,1.3109347553,1.8613095558,1 729 | class1,3.6092474147,2.0838430565,1 730 | class1,3.7863662456,2.1150383849,1 731 | class1,4.1186881965,1.8785321733,1 732 | class1,2.154556957,2.0655918091,1 733 | class1,2.5919642962,1.8040531245,1 734 | class1,3.606215635,2.5390681073,1 735 | class1,4.4072261685,2.2850010372,1 736 | class1,4.0730497521,1.6209110664,1 737 | class1,1.4684544337,2.3317457408,1 738 | class1,3.0820234509,1.3441376357,1 739 | class1,2.1054905609,1.4169803059,1 740 | class1,3.3864059501,1.3991036856,1 741 | class1,3.3972805464,1.8969971669,1 742 | class1,2.86038071,2.2496196907,1 743 | class1,2.6122475895,2.4626714766,1 744 | class1,2.4051075418,1.7129434792,1 745 | class1,3.7614109557,1.5973838349,1 746 | class1,3.9371868725,2.0872342598,1 747 | class1,2.1718020556,2.3200783441,1 748 | class1,5.249866344,1.4307698141,2 749 | class1,3.10783731,1.7932237662,1 750 | class1,4.0097790753,2.0406897473,1 751 | class1,4.7185437525,1.7777038095,1 752 | class1,4.4538764559,1.8818104031,1 753 | class1,2.5142725079,1.7386755079,1 754 | class1,3.1178507329,2.8183567279,1 755 | class1,3.7867872345,1.090734913,6 756 | class1,1.7467391647,2.0512113611,1 757 | class1,2.3286638972,2.8897514989,5 758 | class1,2.5829644742,1.8249658287,1 759 | class1,2.0096493956,2.1026822519,1 760 | class1,3.5864554272,0.9894822402,6 761 | class1,1.1164772403,1.1882066194,1 762 | class1,3.3125935781,1.2630118697,1 763 | class1,4.2899953839,2.7834353269,1 764 | class1,3.4335544267,2.3863121739,1 765 | class1,3.0264534731,1.7385398455,1 766 | class1,2.8018656581,2.1302349716,1 767 | class1,3.2517818007,2.9515217956,1 768 | class1,3.6651971543,1.5673256201,1 769 | class1,3.2279630939,2.2388355416,1 770 | class1,3.4170998486,2.4067541254,1 771 | class1,1.4438797078,1.3871810156,1 772 | class1,3.885827912,1.3872217711,1 773 | class1,3.1962641905,2.1726003047,1 774 | class1,1.5574059256,2.303663184,1 775 | class1,3.4038336446,1.2850528666,1 776 | class1,2.1421610634,2.5370876343,1 777 | class1,3.2714825361,1.7877148735,1 778 | class1,2.1066704539,1.0809840065,1 779 | class1,3.9164844548,2.1129643136,1 780 | class1,3.3582774409,2.6468167233,1 781 | class1,4.2365596644,1.8675269619,1 782 | class1,4.7418482174,2.702794855,1 783 | class1,3.9443144178,2.3753583243,1 784 | class1,3.1223502269,1.3214227635,1 785 | class1,3.5586238621,1.5767326815,1 786 | class1,3.2136737091,1.9772868447,1 787 | class1,2.6348778208,2.5974544618,1 788 | class1,1.3647849817,2.2551728233,1 789 | class1,1.6926604086,1.3012226097,1 790 | class1,1.6688464983,2.6898347906,5 791 | class1,2.4321910995,2.0963522142,1 792 | class1,1.6019157469,2.4333176582,1 793 | class1,3.5943878989,1.7071493419,1 794 | class1,3.2349369661,1.4937298886,1 795 | class1,1.300943036,1.5129112385,1 796 | class1,1.0252061992,2.5435229174,1 797 | class1,2.6309138013,0.9854947937,1 798 | class1,3.6635677611,2.0117588935,1 799 | class1,2.542688189,1.7096656011,1 800 | class1,1.5187541812,1.7753979875,1 801 | class1,1.5252892327,1.7129903762,1 802 | class1,3.9273049175,1.8607088667,1 803 | class1,3.0389492849,2.12136157,1 804 | class1,3.413736807,1.6414568789,1 805 | class1,2.3019716779,1.5299706283,1 806 | class1,2.7996745161,1.2554945841,1 807 | class1,4.225662233,1.4624801563,1 808 | class1,2.6770760567,2.6708754086,1 809 | class1,2.9331784866,1.7748214208,1 810 | class1,1.6480067473,1.2069201248,1 811 | class1,2.6199861244,1.5570684089,1 812 | class1,4.5116607542,2.1529015907,1 813 | class1,2.1153205993,1.9437111663,1 814 | class1,3.5934418264,2.0335024235,1 815 | class1,2.6931777713,1.8237695188,1 816 | class1,3.5355728302,2.6650111415,1 817 | class1,4.3128717311,1.6434532643,1 818 | class1,3.2567681901,1.5999821661,1 819 | class1,2.5346837156,1.0724615117,1 820 | class1,1.6436124684,1.9223392976,1 821 | class1,2.9212218607,1.8319650565,1 822 | class1,3.5345634045,2.2702037452,1 823 | class1,3.3467569974,1.7217413507,1 824 | class1,3.0068796193,1.4186941035,1 825 | class1,2.5580867669,1.013340529,1 826 | class1,3.1995668696,3.4259051571,5 827 | class1,3.1362536115,2.1908560824,1 828 | class1,3.4539954964,3.0240540118,1 829 | class1,2.1415636914,2.2053630836,1 830 | class1,3.2187577699,1.2676916166,1 831 | class1,4.7597247029,2.4977262822,1 832 | class1,2.2674442461,1.7896794374,1 833 | class1,4.578533154,2.6079520939,1 834 | class1,2.9593126472,2.5149067669,1 835 | class1,1.551345535,2.333638698,1 836 | class1,4.3617697523,2.1760494697,1 837 | class1,4.1983252339,1.8979425594,1 838 | class1,2.3615132559,2.9180167554,5 839 | class1,2.6634025831,1.933611731,1 840 | class1,4.0777036399,1.3888913901,1 841 | class1,2.7995883203,1.3680172079,1 842 | class1,3.1794922347,2.0724450572,1 843 | class1,2.0047601112,1.589973124,1 844 | class1,3.0208321348,1.19433488,1 845 | class1,4.0288526242,1.8311714083,1 846 | class1,4.1187503236,2.3202644997,1 847 | class1,2.9275346628,2.4821326387,1 848 | class1,2.9659996483,1.9602446429,1 849 | class1,2.9230060437,1.6350333077,1 850 | class1,2.8982448745,1.75151546,1 851 | class1,2.4084922295,1.2586860719,1 852 | class1,4.7779546849,2.1099188069,1 853 | class1,2.8524984196,1.6143227713,1 854 | class1,2.5830556369,1.6814368182,1 855 | class1,2.7539686139,1.7622910903,1 856 | class1,1.9596425913,1.8631238995,1 857 | class1,2.6120064088,2.1857194025,1 858 | class1,3.0344165196,1.9739176244,1 859 | class1,1.9059198677,2.6096050413,1 860 | class1,3.0654642536,1.8053617894,1 861 | class1,3.7475848652,2.273611767,1 862 | class1,1.9710506855,1.4374148637,1 863 | class1,2.9818764,1.398645859,1 864 | class1,2.4625311545,1.0434393321,1 865 | class1,3.6050359879,1.7322769959,1 866 | class1,3.9899635748,1.9715691722,1 867 | class1,4.0219354823,1.8715292109,1 868 | class1,2.7039935753,2.1765608408,1 869 | class1,2.8001162746,2.1376878293,1 870 | class1,3.1432830037,1.4658201385,1 871 | class1,3.1274493478,2.8051837436,1 872 | class1,4.2999907537,2.5369259764,1 873 | class1,2.6086916597,2.353444091,1 874 | class1,3.7809990325,1.8112510302,1 875 | class1,2.617301969,2.7226381167,1 876 | class1,1.2710853412,2.3389680116,1 877 | class1,1.7239988016,2.5807513238,1 878 | class1,1.4072424386,1.6258270611,1 879 | class1,2.0924592662,2.6057465182,1 880 | class1,4.1864615279,1.9034334734,1 881 | class1,2.8307604116,1.6421606985,1 882 | class1,2.2041883442,1.494810547,1 883 | class1,2.5793757475,1.6386194537,1 884 | class1,1.3478814364,1.1958887698,1 885 | class1,3.7242161878,1.6960536906,1 886 | class1,2.8674299877,1.5201095629,1 887 | class1,1.3196989026,2.4485493958,1 888 | class1,3.7808268817,2.7618923239,1 889 | class1,4.7377838615,1.7353302088,1 890 | class1,2.2210695178,1.9311062183,1 891 | class1,3.6740321123,1.5333203673,1 892 | class1,3.7035337868,2.5186134232,1 893 | class1,3.4884619711,1.3169180571,1 894 | class1,2.8438346583,2.6862052476,1 895 | class1,3.9354058783,2.3231284844,1 896 | class1,2.270575428,1.0456052435,1 897 | class1,3.0552761498,1.7253307978,1 898 | class1,2.5742944167,1.79612339,1 899 | class1,3.0997587109,2.2625503688,1 900 | class1,3.3193800512,2.6196302381,1 901 | class1,2.6805488361,1.9658379342,1 902 | class1,1.7574665996,1.7135739143,1 903 | class1,3.5359988042,0.7031641585,6 904 | class1,2.5083846554,1.6939481545,1 905 | class1,3.0721546717,2.5578342273,1 906 | class1,3.4008335696,1.6309931229,1 907 | class1,3.1465651339,2.2939355703,1 908 | class1,5.6642501432,2.189940344,1 909 | class1,1.0788129961,1.2314103015,1 910 | class1,3.0242795968,1.8804162705,1 911 | class1,3.2476337268,2.4214614742,1 912 | class1,3.9658008164,2.2408930727,1 913 | class1,2.6084247832,2.3191503306,1 914 | class1,3.2295923289,2.0252239705,1 915 | class1,3.5836276811,1.5334504691,1 916 | class1,1.1126709353,2.2362243539,1 917 | class1,3.582478558,2.0926101687,1 918 | class1,2.6089268324,1.8587626756,1 919 | class1,3.9267876041,1.2298943521,1 920 | class1,3.6056086967,2.0118916974,1 921 | class1,2.9067867808,1.5723812238,1 922 | class1,2.2722495423,2.8093475168,5 923 | class1,1.8408449115,2.2286170393,1 924 | class1,2.0090408777,2.9039995229,5 925 | class1,2.5132623433,2.0531495332,1 926 | class1,2.5313970789,1.8576205475,1 927 | class1,2.4234048937,1.7067117801,1 928 | class1,2.8762645394,1.7119984606,1 929 | class1,4.3622517219,1.8019012286,1 930 | class1,3.1859292319,2.6991837116,1 931 | class1,3.0131803593,1.4232410323,1 932 | class1,2.2789403082,2.3603942472,1 933 | class1,3.2206190289,1.9454434279,1 934 | class1,2.4301501032,2.7463530187,1 935 | class1,0.185235815,1.3179055342,1 936 | class1,2.8204039764,2.1550223045,1 937 | class1,3.8075583157,1.4871147526,1 938 | class1,4.0138727514,1.7347341837,1 939 | class1,3.2015213258,1.9839121356,1 940 | class1,2.7045999763,1.7518075946,1 941 | class1,1.5995593483,2.1823439024,1 942 | class1,3.100179344,2.0079489752,1 943 | class1,2.3038559115,2.1620601512,1 944 | class1,1.9683361427,1.2726149988,1 945 | class1,3.0518639581,1.8235463217,1 946 | class1,2.4667859401,1.7384677399,1 947 | class1,3.7895621163,1.9829253375,1 948 | class1,4.0503592546,1.967178265,1 949 | class1,1.8717123979,2.4052914679,1 950 | class1,2.8894053602,2.0604424316,1 951 | class1,1.4786337002,2.6064765238,5 952 | class1,2.9780727391,2.5783186389,1 953 | class1,2.6469335775,1.2922494235,1 954 | class1,4.1744750635,1.4192203538,1 955 | class1,4.4895099088,1.5917333125,1 956 | class1,3.6817632553,2.0873385819,1 957 | class1,2.9485289747,1.3956307199,1 958 | class1,2.8070569384,2.1173876357,1 959 | class1,4.1349026572,2.1949865886,1 960 | class1,3.2490809094,1.9261282404,1 961 | class1,3.3246365424,1.7896678492,1 962 | class1,2.2829530981,2.8260700918,5 963 | class1,4.000979386,1.8612671308,1 964 | class1,3.6373662269,2.3532280864,1 965 | class1,3.5786710704,1.7283020545,1 966 | class1,4.1947628656,2.6041441941,1 967 | class1,3.0836796046,1.0451173779,1 968 | class1,1.7878522083,1.7445906905,1 969 | class1,2.9220807439,2.0017408309,1 970 | class1,3.1956842604,1.0036501694,1 971 | class1,4.3476083057,3.5458799686,6 972 | class1,2.953403274,1.889915568,1 973 | class1,2.0400517711,3.1083287567,5 974 | class1,3.5955323245,2.326386837,1 975 | class1,4.4534190158,1.9477282377,1 976 | class1,3.6104174758,1.2599989986,1 977 | class1,1.6621045355,1.7344755666,1 978 | class1,3.7631891337,2.1199613353,1 979 | class1,3.7092925201,0.9858394616,6 980 | class1,1.5723113773,1.7154828517,1 981 | class1,3.1007043058,2.292063759,1 982 | class1,3.7714058338,2.3921371437,1 983 | class1,2.5419074581,1.9383865523,1 984 | class1,3.700336974,1.3917846835,1 985 | class1,3.8145737684,1.3323525825,1 986 | class1,3.8443977526,2.0252734082,1 987 | class1,4.5036619486,2.0768788827,1 988 | class1,1.0242808939,2.8934767577,5 989 | class1,1.0105358326,2.2268098011,1 990 | class1,2.8042584118,2.0188260494,1 991 | class1,2.4904468085,2.0533027664,1 992 | class1,3.0523675456,1.8734633598,1 993 | class1,1.6594830028,1.6856617586,1 994 | class1,5.1316569642,2.470015413,1 995 | class1,3.0108286705,1.9098149126,1 996 | class1,2.1277232983,2.1280375636,1 997 | class1,3.3884052074,2.1667713093,1 998 | class1,1.7452904654,1.5616230129,1 999 | class1,3.5348675584,1.490765799,1 1000 | class1,2.6963020842,1.7266612095,1 1001 | class1,2.0623066671,0.9126948608,1 1002 | class2,4.9031838888,0.2957434697,2 1003 | class2,4.8816940108,0.3966159356,2 1004 | class2,5.3079812153,0.666865092,2 1005 | class2,4.8974264051,-0.7972600718,2 1006 | class2,5.0078005578,0.5842609515,2 1007 | class2,5.5742468189,-0.7411456778,2 1008 | class2,4.8871614262,-0.3247944744,2 1009 | class2,4.7965110132,-0.1103136064,2 1010 | class2,5.0015396167,-0.8497317428,2 1011 | class2,5.7383769527,0.2632738606,2 1012 | class2,5.8655788615,0.0018036141,2 1013 | class2,4.9022826599,-0.0444180211,2 1014 | class2,5.2323675506,-0.7457121026,2 1015 | class2,5.5991809417,0.2456620754,2 1016 | class2,4.7370430925,-0.2091243265,2 1017 | class2,5.230751205,0.7303655538,2 1018 | class2,4.6726073017,0.6928973613,2 1019 | class2,4.8839556069,-0.0641478144,2 1020 | class2,4.3479220083,0.0929914291,2 1021 | class2,4.8625217021,0.5936460032,2 1022 | class2,4.7528876989,0.6620709343,2 1023 | class2,4.8841451368,0.0513092601,2 1024 | class2,5.2381793254,1.1660724915,2 1025 | class2,4.693830004,0.4171054391,2 1026 | class2,4.3248738359,0.6514646738,2 1027 | class2,4.0329401134,-0.2308914807,2 1028 | class2,4.5428613316,-0.7163493251,2 1029 | class2,5.6770922989,0.5400600967,2 1030 | class2,5.7406535935,0.3062874262,2 1031 | class2,4.742045891,0.3578984498,2 1032 | class2,4.8384812991,-0.4111968962,2 1033 | class2,4.9790001903,-0.3056454483,2 1034 | class2,5.4132099294,0.5509225313,2 1035 | class2,5.0727643309,-0.2052030355,2 1036 | class2,4.996372696,0.7722926481,2 1037 | class2,5.4746126067,-0.3922125721,2 1038 | class2,4.991175298,0.9735430289,2 1039 | class2,4.1241213748,-0.8672247278,2 1040 | class2,5.0752679231,-1.2188379493,2 1041 | class2,4.9947146502,0.1048685774,2 1042 | class2,5.9175515045,0.9116466853,2 1043 | class2,4.2903991159,0.5138176798,2 1044 | class2,5.7490536612,0.5578919715,2 1045 | class2,5.3950847556,-0.1109367313,2 1046 | class2,5.5496057537,0.0975209194,2 1047 | class2,5.1227272848,0.1457144809,2 1048 | class2,4.4597046243,-0.6176036743,2 1049 | class2,4.7375700864,0.8104058868,2 1050 | class2,6.1130774087,-0.1898088248,2 1051 | class2,4.7937992288,0.2329935821,2 1052 | class2,5.5580171598,-0.1739757392,2 1053 | class2,4.9910329834,0.9280519573,2 1054 | class2,4.3184734151,0.764537099,2 1055 | class2,5.074847514,0.3597610516,2 1056 | class2,5.122823194,-0.1966606737,2 1057 | class2,5.2228065308,-0.6390286544,2 1058 | class2,5.3211223449,0.1506805283,2 1059 | class2,5.6017392668,0.5668768567,2 1060 | class2,4.9975333074,-0.0675397434,2 1061 | class2,4.4973817134,-0.7287463133,2 1062 | class2,5.9731937132,1.0099884234,2 1063 | class2,5.296284614,-0.6261959666,2 1064 | class2,5.278484653,0.7968927677,2 1065 | class2,5.0147880644,0.3820970024,2 1066 | class2,5.5679788047,0.128998617,2 1067 | class2,4.6249829706,0.0573021459,2 1068 | class2,4.3466692257,0.2038484521,2 1069 | class2,5.2625688906,-0.2087530076,2 1070 | class2,4.5092254485,0.2630359538,2 1071 | class2,5.1600457305,0.2716920075,2 1072 | class2,4.9671726933,0.4579227067,2 1073 | class2,4.9833942109,-0.5359701666,2 1074 | class2,4.9105954471,0.1189062017,2 1075 | class2,5.0935339304,-0.0657703813,2 1076 | class2,5.2882839111,0.9605539113,2 1077 | class2,4.1325820722,-0.8821201823,2 1078 | class2,4.9768503319,0.3283434713,2 1079 | class2,4.2561047477,-0.287230771,2 1080 | class2,4.3433560258,-0.5264495469,2 1081 | class2,4.7907654903,0.6557610527,2 1082 | class2,4.820990205,0.4749221957,2 1083 | class2,6.1782656371,0.4409194767,2 1084 | class2,5.2055684135,1.1014455504,2 1085 | class2,5.1177024737,0.3398060736,2 1086 | class2,4.6855419659,-0.6035305219,2 1087 | class2,5.1532673177,-0.011111732,2 1088 | class2,5.1446080481,-0.5116205387,2 1089 | class2,4.7408463325,0.1655955057,2 1090 | class2,4.1905287544,-0.045610637,2 1091 | class2,5.0487649935,0.2771108086,2 1092 | class2,4.5101790326,0.3932777864,2 1093 | class2,4.6212415727,0.8105324323,2 1094 | class2,4.2617425535,-0.2754086192,2 1095 | class2,4.4323878195,0.3354516445,2 1096 | class2,4.9775704972,-0.5603528357,2 1097 | class2,5.0372167935,0.5260640819,2 1098 | class2,5.551379408,0.4854240555,2 1099 | class2,4.6715267817,-0.3781320558,2 1100 | class2,4.1115578045,0.0014052552,2 1101 | class2,5.0937193092,0.9468502027,2 1102 | class2,5.2449600538,-0.7200130969,2 1103 | class2,4.8334005089,0.15797354,2 1104 | class2,4.961011207,-0.49697022,2 1105 | class2,5.8231107985,-0.4332615858,2 1106 | class2,4.7563345382,0.4299459186,2 1107 | class2,4.1545782229,0.2669146264,2 1108 | class2,5.7332120737,0.5176730652,2 1109 | class2,4.5424611638,0.6982915065,2 1110 | class2,4.4941863903,-0.6413862996,2 1111 | class2,4.8476975896,-0.3957022616,2 1112 | class2,4.1654935038,-0.4825723998,2 1113 | class2,4.8285099281,0.0819480772,2 1114 | class2,5.4414080601,0.7508569588,2 1115 | class2,5.5902803005,0.0604232688,2 1116 | class2,4.7768390944,-0.1788790122,2 1117 | class2,5.4075017672,0.0696669672,2 1118 | class2,4.9807807827,-0.6749674765,2 1119 | class2,4.7888986053,-0.3979807571,2 1120 | class2,5.6222343048,0.0311375296,2 1121 | class2,4.7103159601,-0.5493949478,2 1122 | class2,4.0603851658,-0.6168992423,2 1123 | class2,4.8228136295,1.105141956,2 1124 | class2,4.9170157283,0.3191699034,2 1125 | class2,4.983201352,-0.4700391508,2 1126 | class2,4.5096270237,-0.4662720847,2 1127 | class2,4.9767322013,-0.1959645586,2 1128 | class2,4.9203670162,-0.4221997366,2 1129 | class2,5.9422481551,-0.5883854539,2 1130 | class2,5.1269973164,0.8258678866,2 1131 | class2,4.9929877167,0.3239203488,2 1132 | class2,4.6240893279,0.0739650174,2 1133 | class2,5.4888429993,0.1156813237,2 1134 | class2,4.7149229676,-0.4883418863,2 1135 | class2,5.1928196672,-0.3322380685,2 1136 | class2,5.6696313117,0.0761332621,2 1137 | class2,4.6683325107,-0.4471685598,2 1138 | class2,4.7742973431,0.5328306419,2 1139 | class2,4.2971914787,-0.7129024507,2 1140 | class2,4.4844469856,0.3317207082,2 1141 | class2,5.1920053114,-0.2923295599,2 1142 | class2,4.8721308731,0.6307012695,2 1143 | class2,4.5221388418,0.2401189538,2 1144 | class2,5.119911874,-0.3817023805,2 1145 | class2,5.4485572059,-0.0547682375,2 1146 | class2,5.9925910641,0.0549466244,2 1147 | class2,5.1886426702,0.4154930283,2 1148 | class2,5.5275161862,-0.3534848551,2 1149 | class2,4.9491659891,0.3073204118,2 1150 | class2,4.4983101863,-0.1726642235,2 1151 | class2,5.0756868367,0.3696757414,2 1152 | class2,6.2085339209,0.4785021969,2 1153 | class2,4.818869432,0.9571320716,2 1154 | class2,5.0572610196,-0.4408509589,2 1155 | class2,4.7779779934,-0.3023938705,2 1156 | class2,3.8271549984,0.9804787851,6 1157 | class2,4.8347052368,-0.3724927345,2 1158 | class2,4.7331233475,-5.96e-05,2 1159 | class2,5.1221155612,-0.107208799,2 1160 | class2,4.9035964797,0.5523573211,2 1161 | class2,5.4712249756,0.2413612046,2 1162 | class2,4.9126997397,-1.2516441082,2 1163 | class2,4.9217273481,0.6462677447,2 1164 | class2,4.0036671053,-0.7201962231,2 1165 | class2,4.998774281,0.067304409,2 1166 | class2,4.9753942408,0.1666100205,2 1167 | class2,5.6826671083,0.2477114067,2 1168 | class2,4.471606262,0.7279966394,2 1169 | class2,5.0577708338,-0.8649118032,2 1170 | class2,5.4454718731,0.2998177114,2 1171 | class2,4.7652595491,0.3436400888,2 1172 | class2,4.7166256933,0.8626423046,2 1173 | class2,5.7820102441,-0.2652994501,2 1174 | class2,4.7219113997,-0.4302278353,2 1175 | class2,4.17784063,-0.3208882874,2 1176 | class2,5.7898798408,-0.1723606962,2 1177 | class2,5.2318545144,0.5371162237,2 1178 | class2,4.852228436,-0.0559856668,2 1179 | class2,4.9205631307,-0.2489283071,2 1180 | class2,4.9908951588,-0.0242424974,2 1181 | class2,4.7930671705,-0.3666067955,2 1182 | class2,5.2692427323,-0.0342381629,2 1183 | class2,5.5003058837,0.4619047695,2 1184 | class2,5.0029744729,-0.3679120636,2 1185 | class2,4.8526537685,-0.4798588723,2 1186 | class2,5.1670003984,0.3458312599,2 1187 | class2,4.7591837807,-0.1723526635,2 1188 | class2,5.0438807798,0.1629098908,2 1189 | class2,4.3354726678,0.7222025826,2 1190 | class2,5.1950652646,0.1417821823,2 1191 | class2,5.3782373932,-0.776464274,2 1192 | class2,5.629215197,-0.9963101104,2 1193 | class2,5.7448298275,-0.5278863035,2 1194 | class2,5.3327932834,0.1109285726,2 1195 | class2,5.751567115,-0.4213828763,2 1196 | class2,5.3903843198,-0.5055596132,2 1197 | class2,5.2889782421,-0.0009511214,2 1198 | class2,4.9368908941,0.0750777718,2 1199 | class2,5.0440759435,0.9319143193,2 1200 | class2,4.6573419565,0.0778541201,2 1201 | class2,4.3585777287,-0.1507089736,2 1202 | class2,5.0963616106,-0.0607435139,2 1203 | class2,5.5655569815,-1.151915471,2 1204 | class2,4.8192772614,-0.1175306086,2 1205 | class2,5.7798137292,-0.3748040986,2 1206 | class2,4.9485879644,-0.0368765908,2 1207 | class2,4.9045903184,0.4136263328,2 1208 | class2,5.638426733,0.1425941309,2 1209 | class2,5.1038212798,-0.9987929318,2 1210 | class2,5.3383527688,-0.6790098656,2 1211 | class2,4.8247227695,-1.4422199082,2 1212 | class2,5.0604031724,-0.2681839075,2 1213 | class2,5.3420782746,-0.7753159326,2 1214 | class2,5.5588098894,-0.2892701481,2 1215 | class2,4.8615297026,-0.4922504284,2 1216 | class2,4.5225415325,-0.375581604,2 1217 | class2,5.8869729991,0.4900311717,2 1218 | class2,5.6118130613,0.7773124878,2 1219 | class2,5.3292850251,0.9201158879,2 1220 | class2,5.6163445307,1.0639406228,2 1221 | class2,4.8460616187,-0.5210233459,2 1222 | class2,4.4731788048,-0.1590950924,2 1223 | class2,5.1778117288,1.1371209836,2 1224 | class2,5.31449518,0.1878706549,2 1225 | class2,4.33789454,-1.001977546,2 1226 | class2,5.0679740801,-0.0105575806,2 1227 | class2,4.9606611215,-0.4160899418,2 1228 | class2,4.7803817532,0.8580062124,2 1229 | class2,5.5548920965,0.7689278437,2 1230 | class2,4.7378684822,0.2445311499,2 1231 | class2,4.6586080781,-0.6595546544,2 1232 | class2,4.5272557463,0.5222476209,2 1233 | class2,5.0144804254,0.3412451655,2 1234 | class2,4.8865558032,-0.3208678492,2 1235 | class2,4.9313030583,-0.3436197758,2 1236 | class2,5.7996265889,0.4281357228,2 1237 | class2,5.6035943982,-0.6427666521,2 1238 | class2,5.0756544788,-0.8054497087,2 1239 | class2,5.8162740853,-0.6190757356,2 1240 | class2,4.8406522545,-0.146530988,2 1241 | class2,3.8509079238,0.2503028666,2 1242 | class2,5.6700116205,-1.0156522664,2 1243 | class2,4.8555352443,-0.0017932198,2 1244 | class2,4.8462698024,-0.6292840995,2 1245 | class2,5.6106966266,0.2850750499,2 1246 | class2,5.8426909237,0.1050769202,2 1247 | class2,4.2589608674,0.1074315842,2 1248 | class2,5.3932534198,0.4675750991,2 1249 | class2,4.3379781502,0.0207757978,2 1250 | class2,4.8487181536,-0.5241783259,2 1251 | class2,5.3313441215,0.3037632156,2 1252 | class2,5.1675382882,0.736120384,2 1253 | class2,5.2306611351,-0.263341706,2 1254 | class2,5.6651162832,-0.8087119187,2 1255 | class2,4.6936093512,-0.2431869066,2 1256 | class2,4.8647939,1.2650446465,2 1257 | class2,5.1657121562,-0.1583258592,2 1258 | class2,5.0807917233,-0.5138737906,2 1259 | class2,5.5085404868,-0.3406414539,2 1260 | class2,5.0839872326,-0.3907672037,2 1261 | class2,5.4363191058,-0.4921851866,2 1262 | class2,4.7700571244,0.1787855482,2 1263 | class2,5.5265199253,0.3894385672,2 1264 | class2,5.0660247323,-0.6294814056,2 1265 | class2,5.1034129129,-0.547853916,2 1266 | class2,4.6603460006,0.721739475,2 1267 | class2,5.0721114253,0.4287838255,2 1268 | class2,4.7719429409,-0.0936657036,2 1269 | class2,4.7041783128,-0.4289130352,2 1270 | class2,4.9348935567,-0.0851639809,2 1271 | class2,5.2991370622,0.1404664327,2 1272 | class2,4.5463891605,0.3060243213,2 1273 | class2,5.1457319944,-0.6385270961,2 1274 | class2,5.5853402239,0.7421057563,2 1275 | class2,4.9894608954,-0.3111196249,2 1276 | class2,5.5244586619,0.7591089174,2 1277 | class2,4.9387878048,0.272616557,2 1278 | class2,5.088184788,0.0027542591,2 1279 | class2,4.1421897611,-0.1852636561,2 1280 | class2,4.4181567421,-0.301506329,2 1281 | class2,4.6951837335,-0.9616378437,2 1282 | class2,4.6852370067,-0.6000804771,2 1283 | class2,4.4289011804,0.4284237895,2 1284 | class2,4.1108814543,0.6040926277,2 1285 | class2,3.8060523025,-0.0266193341,2 1286 | class2,5.4372292098,-0.2849332406,2 1287 | class2,5.2197668884,0.2450324492,2 1288 | class2,5.5782439091,0.4535671744,2 1289 | class2,5.531883024,-0.689501866,2 1290 | class2,4.5406067932,0.4270624316,2 1291 | class2,5.5113171195,0.0653662735,2 1292 | class2,4.5015573855,0.0174184525,2 1293 | class2,5.3911348931,0.0301867087,2 1294 | class2,4.8120609179,-0.1416301966,2 1295 | class2,5.2308303782,-0.1049415771,2 1296 | class2,5.0432378109,0.4154441982,2 1297 | class2,5.477833468,0.1602789441,2 1298 | class2,4.971524592,0.6061305767,2 1299 | class2,4.2592925162,0.0639450577,2 1300 | class2,5.3424876934,-0.6974394381,2 1301 | class2,5.3498041236,0.3058203625,2 1302 | class2,5.1772791119,-0.2703517386,2 1303 | class2,4.6774032039,-0.5980888258,2 1304 | class2,5.0047916869,-0.1856275415,2 1305 | class2,4.7246129595,0.5532136647,2 1306 | class2,4.9350632101,-0.6666888349,2 1307 | class2,5.2464547238,0.3032731322,2 1308 | class2,5.1509416455,-0.204181525,2 1309 | class2,4.3172477342,-0.1773186034,2 1310 | class2,5.1637383379,-0.3989216933,2 1311 | class2,5.4524379658,-0.2012942793,2 1312 | class2,4.8203809433,0.5402971082,2 1313 | class2,5.2752521347,-0.1966117458,2 1314 | class2,4.7404752772,-0.0608028057,2 1315 | class2,4.1792716121,-0.6250168727,2 1316 | class2,5.2969428787,-0.5161696622,2 1317 | class2,4.5820948868,-0.1071166847,2 1318 | class2,4.306581256,0.250977914,2 1319 | class2,3.6929348162,0.0204258445,2 1320 | class2,5.1265127615,-0.3449592598,2 1321 | class2,5.4579008427,-0.1085657776,2 1322 | class2,4.5709951795,0.4309151044,2 1323 | class2,4.4233423884,-0.1053352089,2 1324 | class2,5.207750886,0.7457489739,2 1325 | class2,4.7276989751,-0.4527801072,2 1326 | class2,4.603387352,-0.7235333688,2 1327 | class2,4.4334520824,0.1423811137,2 1328 | class2,5.338738977,-0.2011660887,2 1329 | class2,4.7959441451,-0.0448715934,2 1330 | class2,4.917338552,0.0493537181,2 1331 | class2,4.6928197757,0.7970731319,2 1332 | class2,6.1060177511,-0.5307061751,2 1333 | class2,5.3321321886,0.1300082477,2 1334 | class2,4.6186423198,0.5158440013,2 1335 | class2,4.6462824747,-0.3826044384,2 1336 | class2,5.3460849284,-0.0200456625,2 1337 | class2,5.0059407806,0.5977483046,2 1338 | class2,4.7152799234,-0.4949566985,2 1339 | class2,4.4519539609,0.1880219007,2 1340 | class2,5.231490043,-0.2257573486,2 1341 | class2,5.2972121781,0.1487883472,2 1342 | class2,4.6821141868,0.3599533901,2 1343 | class2,4.8033657481,1.0117980812,2 1344 | class2,3.8860315831,-0.7756282231,2 1345 | class2,4.5733510317,0.1192102523,2 1346 | class2,4.7405508843,-0.1150161925,2 1347 | class2,5.3041045025,-0.140205448,2 1348 | class2,5.0125130235,-0.194087974,2 1349 | class2,5.0770771131,-0.6464561922,2 1350 | class2,5.1837218901,0.0057975905,2 1351 | class2,4.9553303269,0.2625266726,2 1352 | class2,4.4292679499,-0.0845340414,2 1353 | class2,4.493152194,1.2888499632,1 1354 | class2,4.9056208786,-0.8142757123,2 1355 | class2,5.1069121967,0.0435229339,2 1356 | class2,4.9247375775,0.7269307904,2 1357 | class2,4.9234653582,-0.6312215536,2 1358 | class2,5.3234262431,-0.7830475247,2 1359 | class2,4.9119463502,0.0693075429,2 1360 | class2,4.7290208388,-0.3176828573,2 1361 | class2,4.7466061588,-0.3886595446,2 1362 | class2,3.9630862635,-0.6552011625,2 1363 | class2,5.2407273546,0.2544261824,2 1364 | class2,6.3864048971,-0.7159587687,2 1365 | class2,4.9919380919,-0.0896785829,2 1366 | class2,5.2323380826,-0.7242398741,2 1367 | class2,4.5530570537,-0.0616219072,2 1368 | class2,4.3341211577,-0.4678575258,2 1369 | class2,4.7367151959,0.616893323,2 1370 | class2,5.0748632092,-0.0654569086,2 1371 | class2,5.0512322565,0.4559310274,2 1372 | class2,4.540763767,-0.4308575546,2 1373 | class2,4.9195500321,0.3788828604,2 1374 | class2,5.1106337103,0.8727079277,2 1375 | class2,4.6091379688,-0.9897777597,2 1376 | class2,4.6793433937,-0.167514707,2 1377 | class2,4.777055923,0.0251162763,2 1378 | class2,4.4860009161,-0.5400071322,2 1379 | class2,4.9605887291,1.0459824511,2 1380 | class2,4.7323651134,-0.0790932431,2 1381 | class2,5.3758145017,0.9233643112,2 1382 | class2,4.6783081144,-0.4969256781,2 1383 | class2,5.2596250126,-0.1182668727,2 1384 | class2,4.9612393592,-0.2669538201,2 1385 | class2,5.1229365161,-1.1970250384,2 1386 | class2,4.7119217599,-0.3985654889,2 1387 | class2,4.7154693015,-0.2063896569,2 1388 | class2,4.421285091,0.0455348416,2 1389 | class2,5.2372875065,-0.7745279289,2 1390 | class2,4.5673574288,0.049900945,2 1391 | class2,3.8771504158,0.332297423,2 1392 | class2,5.3773210593,0.1666041841,2 1393 | class2,4.1895007795,0.0055814297,2 1394 | class2,4.8620929686,0.1965100552,2 1395 | class2,5.0828601827,0.2974724099,2 1396 | class2,4.1014259589,-0.2131243058,2 1397 | class2,5.0662814739,0.0954047884,2 1398 | class2,5.0264688414,0.5848891386,2 1399 | class2,5.1297847171,-0.6809283222,2 1400 | class2,4.5520042571,0.4827341739,2 1401 | class2,4.2427303477,0.1972078283,2 1402 | class2,5.5155137082,0.966919836,2 1403 | class2,4.9143182693,0.2545629066,2 1404 | class2,4.3764299057,0.1919759422,2 1405 | class2,4.4558036199,-0.2993498995,2 1406 | class2,5.1278532471,0.906809057,2 1407 | class2,5.0016911015,-0.3117893659,2 1408 | class2,4.5892022435,-0.3050991394,2 1409 | class2,4.8803825729,-0.1496491651,2 1410 | class2,5.3466295619,0.0216024373,2 1411 | class2,5.1594531419,-0.5501159592,2 1412 | class2,4.958558603,0.0725233959,2 1413 | class2,4.1931684891,-0.1882761543,2 1414 | class2,4.7144943389,0.8847932902,2 1415 | class2,5.2673229121,-0.1875807665,2 1416 | class2,5.0019659176,-0.1687600459,2 1417 | class2,4.7726371131,0.570271656,2 1418 | class2,5.697601562,-0.1866325256,2 1419 | class2,4.7605276824,0.4102705278,2 1420 | class2,4.6379377531,0.0111885268,2 1421 | class2,4.9899563654,-0.6640830196,2 1422 | class2,5.9163237655,-0.2473201928,2 1423 | class2,5.5340587014,-0.0141130401,2 1424 | class2,4.4016942089,0.2178625084,2 1425 | class2,5.1982010249,0.9402929702,2 1426 | class2,5.4192185305,0.1412124599,2 1427 | class2,4.6917572566,0.4940621111,2 1428 | class2,4.6493763799,-0.4163772987,2 1429 | class2,4.4987533215,-0.5061998069,2 1430 | class2,4.5672992751,-0.2745936807,2 1431 | class2,3.987126786,0.0519376675,2 1432 | class2,4.6211778258,0.1559420911,2 1433 | class2,5.30911949,-0.5793268317,2 1434 | class2,4.7199331348,-0.2616770658,2 1435 | class2,5.7122253105,1.1016319067,2 1436 | class2,4.318941617,0.2697258726,2 1437 | class2,5.0131323643,0.4556898776,2 1438 | class2,4.6988493407,-0.6707150287,2 1439 | class2,4.9834534169,-0.0369888638,2 1440 | class2,4.8824687622,-0.7799553256,2 1441 | class2,4.5504734572,-0.040318417,2 1442 | class2,4.91298371,0.0943215409,2 1443 | class2,5.5814521557,0.7171381866,2 1444 | class2,4.6648142582,-0.1510193701,2 1445 | class2,4.9136394208,0.4283046025,2 1446 | class2,5.1948745124,-0.4418753509,2 1447 | class2,5.2278853849,-0.7457846519,2 1448 | class2,4.9107144908,0.6725559715,2 1449 | class2,5.3126899273,0.2756116718,2 1450 | class2,5.1705923169,0.4835231313,2 1451 | class2,5.4199338756,0.152149891,2 1452 | class2,5.3707575863,-0.7427413788,2 1453 | class2,5.2896898303,0.3282877009,2 1454 | class2,5.8085573659,0.0077631584,2 1455 | class2,4.9481176164,0.1203510212,2 1456 | class2,5.1225293962,0.0549765203,2 1457 | class2,4.8018432473,-0.5795239918,2 1458 | class2,5.1539751518,0.4028798203,2 1459 | class2,4.872085607,-0.329627258,2 1460 | class2,4.48764607,-0.061713032,2 1461 | class2,4.2205793945,-0.578550393,2 1462 | class2,5.2735018202,-0.3861892451,2 1463 | class2,5.1884725968,-1.2918618282,2 1464 | class2,4.8769679211,0.2155383165,2 1465 | class2,4.8453232365,-0.1535451675,2 1466 | class2,5.6261819034,0.2108054594,2 1467 | class2,5.1484120087,-0.5553518837,2 1468 | class2,4.7162877481,-0.2662974205,2 1469 | class2,4.8640362374,-0.4725003203,2 1470 | class2,4.9655175916,-0.3153567267,2 1471 | class2,4.5622769109,-0.025220759,2 1472 | class2,4.9332625491,0.0707350634,2 1473 | class2,6.0043091608,0.0936486789,2 1474 | class2,5.02599178,0.7512905456,2 1475 | class2,5.1134097336,0.5683715471,2 1476 | class2,5.6480606682,0.0116851963,2 1477 | class2,4.9174895203,0.0042406256,2 1478 | class2,4.7197420461,0.144417486,2 1479 | class2,5.0957237425,0.085183139,2 1480 | class2,5.3672537044,0.4952874252,2 1481 | class2,5.2179696207,0.6864365163,2 1482 | class2,5.30484842,0.1745543873,2 1483 | class2,4.9291951359,0.3036141416,2 1484 | class2,4.3213702246,-0.1067472288,2 1485 | class2,4.9580942911,-1.0591595465,2 1486 | class2,5.089536718,0.0559468539,2 1487 | class2,5.0580128103,-0.9838497949,2 1488 | class2,5.0904198047,-0.225873243,2 1489 | class2,4.5701666452,1.0138181108,2 1490 | class2,4.7939458741,0.5464026754,2 1491 | class2,4.8165189712,-0.6592994103,2 1492 | class2,4.8402954691,-0.2163082137,2 1493 | class2,4.7045537972,-0.0748609045,2 1494 | class2,4.6497037881,-0.5478118359,2 1495 | class2,5.5631944042,0.0208204209,2 1496 | class2,5.5998708926,0.0984663779,2 1497 | class2,4.724496987,-0.3105420275,2 1498 | class2,4.8073082546,-0.1695669309,2 1499 | class2,4.4609506115,0.2355424858,2 1500 | class2,4.9110017044,0.3439807821,2 1501 | class2,5.585705883,0.041123471,2 1502 | class2,5.7535454204,-0.191008638,2 1503 | class2,4.9534965808,0.43326746,2 1504 | class2,5.2525795074,-0.1078895281,2 1505 | class2,4.2809831096,0.0415046447,2 1506 | class2,5.590540016,0.3260251643,2 1507 | class2,5.5576421027,0.2887924041,2 1508 | class2,4.0551373671,0.3619155269,2 1509 | class2,4.8162119448,-0.1347678852,2 1510 | class2,5.405534202,0.8611782612,2 1511 | class2,4.2469863246,-0.0316269939,2 1512 | class2,4.8339342774,-0.0660607492,2 1513 | class2,4.6521054022,-0.0229509284,2 1514 | class2,5.3075640511,-0.5141046661,2 1515 | class2,5.166845176,-0.1439596461,2 1516 | class2,4.6875851306,0.2522852304,2 1517 | class2,4.97659165,0.4838498572,2 1518 | class2,5.4701608991,-0.7738427022,2 1519 | class2,4.7750454914,-0.0635076569,2 1520 | class2,4.7041494219,-0.6825540825,2 1521 | class2,5.4479631238,-1.1670136004,2 1522 | class2,5.1035400261,0.6583212422,2 1523 | class2,4.6114578788,0.4785048545,2 1524 | class2,4.3437343716,-0.0587266642,2 1525 | class2,4.9713505681,0.8883592,2 1526 | class2,5.3318508752,-0.0025948643,2 1527 | class2,4.8785261347,0.2476357014,2 1528 | class2,5.2139277011,0.2913233691,2 1529 | class2,5.8724942849,-0.1987505083,2 1530 | class2,4.3234805604,-0.863595722,2 1531 | class2,4.3392087658,0.3138637836,2 1532 | class2,5.5926241291,-0.0357832477,2 1533 | class2,5.0910806418,-0.6600066427,2 1534 | class2,5.3111121032,-0.3202687628,2 1535 | class2,5.6270824333,0.1772748681,2 1536 | class2,5.1887188835,-0.5973851427,2 1537 | class2,4.5078850144,-0.3970134601,2 1538 | class2,4.7149574988,0.0876016237,2 1539 | class2,5.481879453,0.1022179125,2 1540 | class2,4.3229179389,-0.3434452271,2 1541 | class2,4.9829544766,-0.0723514477,2 1542 | class2,5.2917514887,0.3098830367,2 1543 | class2,5.2839441696,-0.6750050388,2 1544 | class2,4.7472983952,0.0991089465,2 1545 | class2,5.1039407822,0.0944304027,2 1546 | class2,5.0609048342,-0.3024453965,2 1547 | class2,4.5721255014,-0.1844808262,2 1548 | class2,3.9513534691,-0.1454866207,2 1549 | class2,5.0796462686,-0.1381227314,2 1550 | class2,4.6474096697,-0.3011650567,2 1551 | class2,5.4850451328,0.2314629114,2 1552 | class2,4.6063902318,0.3404698973,2 1553 | class2,5.0295331258,-0.4082754631,2 1554 | class2,5.2186681022,0.3278046241,2 1555 | class2,5.2199707059,-0.7896360041,2 1556 | class2,5.4553588827,-0.1204185998,2 1557 | class2,5.0234994062,0.15971836,2 1558 | class2,5.8773443241,-0.5344577965,2 1559 | class2,4.436478312,0.4835883537,2 1560 | class2,5.9698469293,-0.3358476679,2 1561 | class2,5.3540755725,-0.6923599964,2 1562 | class2,4.3309490648,0.7547578608,2 1563 | class2,5.1758222124,0.3252681542,2 1564 | class2,5.3021761767,0.447878226,2 1565 | class2,4.6761112723,1.8082046771,1 1566 | class2,4.2686844364,-0.750029789,2 1567 | class2,5.2659003856,0.3220564141,2 1568 | class2,4.1862348659,0.0175140193,2 1569 | class2,4.7476580776,0.6407320265,2 1570 | class2,6.1072155609,0.6921648243,2 1571 | class2,4.7812418551,0.6279460802,2 1572 | class2,5.059458104,0.1883971137,2 1573 | class2,5.626940774,-0.5888563733,2 1574 | class2,4.9012122,-0.4021331066,2 1575 | class2,4.8806142853,0.1908934238,2 1576 | class2,5.3133049914,0.5125520685,2 1577 | class2,4.7364948275,0.8962046229,2 1578 | class2,4.6336269807,-1.0531677328,2 1579 | class2,4.9118662673,-0.5733502093,2 1580 | class2,5.8181634512,-0.0551421813,2 1581 | class2,6.1256033079,0.7064378623,2 1582 | class2,4.447723448,-0.5164424076,2 1583 | class2,4.4681873525,0.4070323331,2 1584 | class2,5.019577996,-0.0645002805,2 1585 | class2,5.2161165224,0.91155259,2 1586 | class2,4.917772655,0.2598680752,2 1587 | class2,5.2509086609,-0.1669489609,2 1588 | class2,5.11702677,-0.0906845506,2 1589 | class2,5.251584008,0.4632134165,2 1590 | class2,4.3622630634,0.4674805415,2 1591 | class2,4.8497485548,0.1394575263,2 1592 | class2,5.7754125392,0.8870597583,2 1593 | class2,4.7774318561,-0.298679616,2 1594 | class2,4.7011104729,0.9939534206,2 1595 | class2,5.2568754074,-0.4283715622,2 1596 | class2,5.6716367048,-0.2145778097,2 1597 | class2,5.2031953498,0.7767284195,2 1598 | class2,5.1410249746,0.0071237395,2 1599 | class2,4.7154774838,-0.2606531432,2 1600 | class2,5.1910117924,0.0938215122,2 1601 | class2,5.544188351,-0.3532830802,2 1602 | class2,5.8784394119,0.5552527995,2 1603 | class2,4.8154653161,-0.5217369878,2 1604 | class2,4.6505576052,-0.5917522491,2 1605 | class2,5.4039959456,0.0494443838,2 1606 | class2,4.7779597278,0.2045021111,2 1607 | class2,5.2113047425,-0.0258210012,2 1608 | class2,5.2620451771,0.1412290389,2 1609 | class2,4.6811599451,-0.2604525322,2 1610 | class2,5.0411834244,0.0971568342,2 1611 | class2,5.1096582547,-0.3473730716,2 1612 | class2,5.8100621867,1.2031705222,2 1613 | class2,4.6632187345,-0.1224394946,2 1614 | class2,5.0685910094,-0.3913334006,2 1615 | class2,4.6322486094,0.1416133311,2 1616 | class2,4.7787425315,0.3083870796,2 1617 | class2,5.68989448,0.4966453947,2 1618 | class2,5.0990167445,0.2560831678,2 1619 | class2,4.2975708596,1.0816573183,2 1620 | class2,5.4428549939,-0.1534653236,2 1621 | class2,4.3164137774,0.9916099589,2 1622 | class2,4.6327045758,0.672661537,2 1623 | class2,4.604924961,0.395352298,2 1624 | class2,4.7373856699,-0.4227054019,2 1625 | class2,4.4190695032,-0.2358254318,2 1626 | class2,5.3130018059,0.0186263756,2 1627 | class2,4.5455054989,0.4604616078,2 1628 | class2,4.2305597454,0.0924472846,2 1629 | class2,4.0180146055,0.2359484187,2 1630 | class2,5.3307622623,-0.1889040966,2 1631 | class2,5.1603845153,0.1298406972,2 1632 | class2,4.546451269,-0.4422303356,2 1633 | class2,5.1684614458,-0.1783440202,2 1634 | class2,5.584006916,0.649102802,2 1635 | class2,4.8193982685,0.2359174943,2 1636 | class2,4.789532409,-0.9290995763,2 1637 | class2,4.4791828238,0.2878233926,2 1638 | class2,5.5488048653,-0.2894629352,2 1639 | class2,4.447893373,-0.0694323278,2 1640 | class2,4.9122152569,0.6695056588,2 1641 | class2,4.5738989524,0.5872707705,2 1642 | class2,4.8252242136,-0.5524650913,2 1643 | class2,4.2591632033,0.6035027524,2 1644 | class2,5.1058200982,-1.2553378009,2 1645 | class2,5.0609014527,0.1257120447,2 1646 | class2,4.111932529,0.2880333029,2 1647 | class2,5.5431657359,-0.742149475,2 1648 | class2,5.5716759116,0.8867719593,2 1649 | class2,4.2650096478,0.2466384809,2 1650 | class2,3.9820531038,-0.7077576046,2 1651 | class2,5.0551641964,-0.7302155409,2 1652 | class2,4.6527200521,-0.152375849,2 1653 | class2,4.9522231137,0.9539139359,2 1654 | class2,4.4231136495,0.0136641338,2 1655 | class2,5.6543435142,-0.4745608128,2 1656 | class2,5.281206804,-0.5474403464,2 1657 | class2,5.5659154885,-0.4992784456,2 1658 | class2,5.1549642085,-0.3974269433,2 1659 | class2,5.2334704975,0.4461009769,2 1660 | class2,4.7091757232,0.255863965,2 1661 | class2,5.2124941064,-0.4540271022,2 1662 | class2,4.3921222561,-0.2697187068,2 1663 | class2,5.6852170849,0.207221662,2 1664 | class2,4.8131177095,-0.0739741792,2 1665 | class2,3.913095548,-0.6613945191,2 1666 | class2,4.5097358355,-0.1375314989,2 1667 | class2,4.5104636292,-0.104705004,2 1668 | class2,4.9623161613,-0.0053153564,2 1669 | class2,4.6815354058,0.5559111078,2 1670 | class2,4.4508419446,1.1416269913,2 1671 | class2,4.5236297145,0.4005416558,2 1672 | class2,5.4415547193,0.3670845891,2 1673 | class2,5.4783432857,0.5315822921,2 1674 | class2,4.8081387473,-0.70775979,2 1675 | class2,4.7208232593,0.4367001447,2 1676 | class2,5.2771103529,-0.1254228058,2 1677 | class2,4.4367111264,0.0808445471,2 1678 | class2,5.4333681879,-0.7781510571,2 1679 | class2,4.7667871082,0.8153503341,2 1680 | class2,4.7157417273,-0.0189971462,2 1681 | class2,5.8025781078,-0.1929450366,2 1682 | class2,5.0997169907,0.0307118621,2 1683 | class2,4.7572148086,0.5541512196,2 1684 | class2,5.0116739886,0.3895058294,2 1685 | class2,4.732279671,0.5908139529,2 1686 | class2,4.9842041908,0.5924263975,2 1687 | class2,4.9362621873,0.0957982923,2 1688 | class2,5.3789358282,-0.0836085417,2 1689 | class2,5.1041663778,0.4505534166,2 1690 | class2,4.8507834338,-0.1623942913,2 1691 | class2,4.3792442181,-0.167074665,2 1692 | class2,4.5798757551,0.3586680647,2 1693 | class2,5.6597665442,0.31646709,2 1694 | class2,5.7887941462,0.1862694583,2 1695 | class2,4.4816939922,-0.1332817315,2 1696 | class2,5.6083462751,-0.3702841013,2 1697 | class2,4.3507331919,-0.0868209459,2 1698 | class2,4.2765717507,0.3885169995,2 1699 | class2,5.3244386537,-1.3658238695,2 1700 | class2,4.6454815859,-0.7753546441,2 1701 | class2,5.08299484,0.6587780641,2 1702 | class2,5.2445912032,-0.219324026,2 1703 | class2,4.4581506588,-0.3795117913,2 1704 | class2,4.630582364,0.5141916211,2 1705 | class2,4.8451380321,-0.7729076329,2 1706 | class2,4.4504878254,-0.362253478,2 1707 | class2,4.9557918228,0.1145064989,2 1708 | class2,5.1015190799,-0.260489723,2 1709 | class2,4.5398001805,0.1909518972,2 1710 | class2,5.058354419,0.2314877067,2 1711 | class2,5.1393415084,-0.27239602,2 1712 | class2,4.8271232525,-1.0522754546,2 1713 | class2,3.9746152979,-0.2855368392,2 1714 | class2,5.4177387327,-0.8751340878,2 1715 | class2,5.1642579874,-0.3624557029,2 1716 | class2,4.7376032476,-0.6601642493,2 1717 | class2,5.3348077722,0.0503427996,2 1718 | class2,5.2625878689,0.2371064179,2 1719 | class2,5.1128183207,-0.0848988906,2 1720 | class2,4.7466035105,-0.0177011377,2 1721 | class2,5.0431608141,0.3683105404,2 1722 | class2,4.647993896,-0.310445634,2 1723 | class2,4.2998354291,0.5691745247,2 1724 | class2,5.039498955,-0.221820537,2 1725 | class2,4.4977940979,0.2042732343,2 1726 | class2,5.2109720924,-0.0425760007,2 1727 | class2,4.9600239737,-0.307405433,2 1728 | class2,5.0755440293,-0.0423860712,2 1729 | class2,4.5705316462,0.2312000241,2 1730 | class2,4.9441769459,-0.2066479765,2 1731 | class2,4.8907537091,-0.5407811653,2 1732 | class2,4.8785147372,0.0361934109,2 1733 | class2,5.2639413433,-0.0440231217,2 1734 | class2,4.6217930504,-0.256094368,2 1735 | class2,4.5771423409,-0.4252014326,2 1736 | class2,4.1054828797,0.0080249394,2 1737 | class2,5.0922600699,0.2507865855,2 1738 | class2,5.0946037368,1.4061506902,2 1739 | class2,4.723060883,0.5451529698,2 1740 | class2,4.7414854603,1.075284429,2 1741 | class2,4.3565807743,-0.1069586322,2 1742 | class2,5.4763518158,0.0892841168,2 1743 | class2,4.8528288938,0.2797997306,2 1744 | class2,5.0297512257,-0.408985101,2 1745 | class2,4.7591883096,-0.6431872917,2 1746 | class2,5.3717282493,-0.6958137417,2 1747 | class2,4.1509392136,-0.6295925224,2 1748 | class2,5.3079080211,-0.2465714351,2 1749 | class2,4.2777724853,-0.2812425237,2 1750 | class2,4.3447566553,0.2876851172,2 1751 | class2,4.8347505702,-0.0575955263,2 1752 | class2,4.3402321042,-0.60276694,2 1753 | class2,5.5253018801,-0.6840098637,2 1754 | class2,4.2433072572,0.1766581921,2 1755 | class2,5.3185640665,-0.7649423459,2 1756 | class2,5.3390540472,-0.0033282305,2 1757 | class2,4.2524990529,0.4646360039,2 1758 | class2,5.7352730356,-0.4454667029,2 1759 | class2,4.3162775198,0.5101165291,2 1760 | class2,4.6829682262,0.2446900255,2 1761 | class2,6.0485761522,-0.2348048906,2 1762 | class2,5.7696193539,-0.1837416705,2 1763 | class2,4.291779561,0.5899350722,2 1764 | class2,5.1565757027,-0.1589664944,2 1765 | class2,4.6840424476,-0.8930436336,2 1766 | class2,5.181870919,-1.0342294597,2 1767 | class2,5.6185582323,0.2542693647,2 1768 | class2,5.3337040299,0.0603001431,2 1769 | class2,4.8646681689,-0.3879899765,2 1770 | class2,4.9467729243,-0.1347350787,2 1771 | class2,5.240020175,-0.1221387672,2 1772 | class2,5.4540563849,0.4508387574,2 1773 | class2,5.3542019067,0.540968905,2 1774 | class2,5.4344767413,-0.0579947299,2 1775 | class2,4.8219714841,-0.4814012497,2 1776 | class2,5.526129423,0.0962285005,2 1777 | class2,4.9145304167,0.8062893087,2 1778 | class2,5.0654792937,0.0007954329,2 1779 | class2,4.3869688486,-0.0586954935,2 1780 | class2,5.690900002,-0.0539034776,2 1781 | class2,5.4228442453,-0.6835552822,2 1782 | class2,4.4726863185,0.0152029514,2 1783 | class2,4.3419992547,0.1685210895,2 1784 | class2,5.6672804707,-1.4668583845,2 1785 | class2,5.0626489722,-0.8167805766,2 1786 | class2,4.361469086,0.1581582007,2 1787 | class2,5.5356515953,-0.0933323069,2 1788 | class2,5.0715820076,-0.1007164308,2 1789 | class2,5.2693835287,0.0358060738,2 1790 | class2,4.8295955803,-0.5814990832,2 1791 | class2,4.6344979404,0.0465241088,2 1792 | class2,5.3110361213,0.3724748769,2 1793 | class2,5.1637247082,-0.6067849501,2 1794 | class2,5.589424514,0.19024933,2 1795 | class2,4.5171745585,-0.3359773613,2 1796 | class2,5.8245918911,0.3104120614,2 1797 | class2,5.39407234,0.3455117615,2 1798 | class2,5.4055450797,0.6171977064,2 1799 | class2,4.1892726339,0.321634901,2 1800 | class2,5.4734814037,-0.1012535507,2 1801 | class2,5.7141146654,0.2967661324,2 1802 | class2,4.4186659295,0.1933074966,2 1803 | class2,5.9779578108,-0.0430894138,2 1804 | class2,5.1481949251,0.4550300057,2 1805 | class2,4.3315377643,0.4822017851,2 1806 | class2,5.4505946753,-0.4495978512,2 1807 | class2,5.366841555,0.1009535751,2 1808 | class2,5.4546360412,0.0010240458,2 1809 | class2,3.9656489035,0.8516477732,2 1810 | class2,4.7303543031,-0.5549659049,2 1811 | class2,5.2548244312,-0.2845895741,2 1812 | class2,5.3457323513,-0.9424205073,2 1813 | class2,4.3305146945,-0.8800785732,2 1814 | class2,5.1755610616,1.1689156082,2 1815 | class2,4.8582439461,0.0681505732,2 1816 | class2,5.0765730305,0.6778996578,2 1817 | class2,4.7778873266,-0.2737842067,2 1818 | class2,4.3721201726,0.0259091496,2 1819 | class2,5.374977163,-0.5952097048,2 1820 | class2,4.1708488991,-1.131656008,2 1821 | class2,5.1326230851,1.0090446632,2 1822 | class2,4.7137702284,0.0638030724,2 1823 | class2,5.1778525014,-0.3877473175,2 1824 | class2,5.2489746885,-0.0380365672,2 1825 | class2,4.9729969394,0.8573232952,2 1826 | class2,5.4006971618,0.0483964556,2 1827 | class2,4.9650625065,0.8334064444,2 1828 | class2,5.4846813242,-0.1120117227,2 1829 | class2,4.8251498723,-0.3923749389,2 1830 | class2,4.0514370287,0.7359532469,2 1831 | class2,4.8326558957,-1.0015561446,2 1832 | class2,4.1268034555,0.4113247499,2 1833 | class2,6.1724352738,0.7218282768,2 1834 | class2,4.7574162007,-0.0326658328,2 1835 | class2,5.107030634,0.409513201,2 1836 | class2,4.0152824747,0.9095672362,2 1837 | class2,5.1554985783,-0.1262823848,2 1838 | class2,6.1148315314,0.0481791115,2 1839 | class2,5.2234530495,0.0421898959,2 1840 | class2,4.0760646499,-0.2883340732,2 1841 | class2,4.6976329028,1.2371488027,2 1842 | class2,5.3578647144,-0.0769524165,2 1843 | class2,5.427940257,0.7334397145,2 1844 | class2,4.7939853391,-0.0301676465,2 1845 | class2,5.7113138651,-0.0810393203,2 1846 | class2,4.7293774379,0.1811463182,2 1847 | class2,4.5423214678,0.3243663639,2 1848 | class2,4.5645802158,-0.4788975147,2 1849 | class2,5.3695201101,0.5601209949,2 1850 | class2,4.582823521,0.2911430687,2 1851 | class2,4.9152516512,-0.062865352,2 1852 | class2,4.7559384317,0.3270136476,2 1853 | class2,5.4142346508,-0.2095363252,2 1854 | class2,4.5486812731,0.3594765,2 1855 | class2,5.0397954225,-0.8043286648,2 1856 | class2,4.7880215859,0.0946123647,2 1857 | class2,6.2941502602,0.0796804611,2 1858 | class2,5.668951006,0.3186139343,2 1859 | class2,5.7124179834,0.7689864426,2 1860 | class2,4.9401135192,-0.1843916251,2 1861 | class2,4.7755826768,0.4749599114,2 1862 | class2,5.3113586024,-0.1166896188,2 1863 | class2,4.3004288103,-0.182245092,2 1864 | class2,4.8318989959,-0.1566833973,2 1865 | class2,4.3042472168,0.1310981217,2 1866 | class2,5.0131992276,-0.7690167705,2 1867 | class2,5.5466039399,-0.2077863826,2 1868 | class2,5.0976921062,-0.2330397574,2 1869 | class2,5.0069399399,-0.964254859,2 1870 | class2,4.4178426399,0.6161909923,2 1871 | class2,4.386639221,-0.2920476097,2 1872 | class2,4.9206370979,-0.2462240773,2 1873 | class2,5.2313228495,0.868774725,2 1874 | class2,5.4562316706,0.1437728243,2 1875 | class2,5.1919093838,-0.1435391232,2 1876 | class2,5.7511966583,-0.2914134749,2 1877 | class2,5.1586360323,0.8063602584,2 1878 | class2,4.8397533541,-0.6073308504,2 1879 | class2,5.7549886121,-0.1121382574,2 1880 | class2,5.1475694665,0.0708871888,2 1881 | class2,6.022997709,-0.3971222121,2 1882 | class2,5.8504019473,0.1055859248,2 1883 | class2,3.9421701045,-0.4062634625,2 1884 | class2,4.7523936848,0.170313869,2 1885 | class2,3.8884339899,-0.0481639273,2 1886 | class2,4.4724606073,0.3940330012,2 1887 | class2,5.3584843268,0.0465851554,2 1888 | class2,4.8705361305,-0.4927060625,2 1889 | class2,5.4004563513,-0.0702752759,2 1890 | class2,4.5765852449,-0.0964075166,2 1891 | class2,5.2459816795,0.706396284,2 1892 | class2,4.8789446407,0.1850133309,2 1893 | class2,4.8546648663,-0.099436777,2 1894 | class2,5.5101932963,-0.3005085357,2 1895 | class2,4.5252571261,0.0546808318,2 1896 | class2,4.7549904045,-0.5843871492,2 1897 | class2,5.8210565895,-1.0084833973,2 1898 | class2,6.0007803571,0.3664916508,2 1899 | class2,5.5112660296,-0.0364476847,2 1900 | class2,4.7842749283,1.023384535,2 1901 | class2,3.7373566051,0.9858609482,6 1902 | class2,4.4227077482,0.5709551919,2 1903 | class2,4.7030568732,-0.2287997837,2 1904 | class2,4.970819853,-0.0843011285,2 1905 | class2,4.8605648862,0.5725914455,2 1906 | class2,4.4833348493,0.4959690108,2 1907 | class2,6.2171228673,-0.4413089317,2 1908 | class2,4.2291572716,0.0439755203,2 1909 | class2,5.7017720903,0.0574549499,2 1910 | class2,5.739570159,-0.5016689572,2 1911 | class2,5.4236252835,0.5701037284,2 1912 | class2,4.1222151845,-0.9101437312,2 1913 | class2,4.8635631673,-0.6078926872,2 1914 | class2,4.7885834577,-0.0509200731,2 1915 | class2,5.2323635605,0.0491382869,2 1916 | class2,5.5794395893,-0.5967090553,2 1917 | class2,4.4388867636,0.5276067073,2 1918 | class2,5.7483007344,-0.1186379319,2 1919 | class2,5.6903739076,-0.4497336607,2 1920 | class2,4.2402745318,0.0422793873,2 1921 | class2,5.2158909397,-0.2604773659,2 1922 | class2,4.3835933484,-0.9540382239,2 1923 | class2,5.5013591663,-1.0152935268,2 1924 | class2,5.2607183402,0.1048918173,2 1925 | class2,4.8043076187,-0.3009350681,2 1926 | class2,4.8654101062,-0.7344356428,2 1927 | class2,4.6372843274,0.3314784777,2 1928 | class2,4.2739088966,0.1998018269,2 1929 | class2,4.4737672917,-0.4576525672,2 1930 | class2,4.7776740964,0.5689670351,2 1931 | class2,6.1006504228,-0.3172402665,2 1932 | class2,4.3107781013,-0.0453433354,2 1933 | class2,5.4490678,-0.1401727967,2 1934 | class2,4.4151587919,0.1730237399,2 1935 | class2,4.9302573722,0.6228468505,2 1936 | class2,4.9982322222,0.1570563982,2 1937 | class2,4.4193405054,0.1365657146,2 1938 | class2,4.2576059129,0.0699899923,2 1939 | class2,5.1976164729,-0.3861490542,2 1940 | class2,5.6682750911,-0.1310299296,2 1941 | class2,4.8233867173,-0.6065608944,2 1942 | class2,5.5893657791,0.4931820631,2 1943 | class2,5.0298702933,-0.1011345475,2 1944 | class2,5.1902961799,-0.6268208638,2 1945 | class2,4.7416644103,0.3640677505,2 1946 | class2,3.802589068,0.1447860193,2 1947 | class2,4.9189610595,0.282236819,2 1948 | class2,4.6552630848,0.0696081607,2 1949 | class2,5.061784427,-0.5140945701,2 1950 | class2,5.1354552527,-0.7765556936,2 1951 | class2,4.8165144661,-0.2254260632,2 1952 | class2,4.7227691796,0.417798655,2 1953 | class2,5.2219320787,-0.5762995483,2 1954 | class2,4.6780938773,0.2231293924,2 1955 | class2,5.0563286972,0.3856268672,2 1956 | class2,5.2873286918,0.1682383772,2 1957 | class2,4.8398844465,0.5319683428,2 1958 | class2,5.3170020327,0.284558688,2 1959 | class2,4.8768165223,-0.0453339531,2 1960 | class2,4.8734151321,-0.5787363083,2 1961 | class2,5.5094617758,-1.1371776854,2 1962 | class2,5.2267208703,-0.0429567888,2 1963 | class2,4.6900208128,-0.582466494,2 1964 | class2,5.2098821097,0.2101210162,2 1965 | class2,5.0008448912,0.6420791856,2 1966 | class2,4.799467249,-0.0855678586,2 1967 | class2,4.5919248449,-0.5948486579,2 1968 | class2,4.7973644036,-0.8568893177,2 1969 | class2,5.2078269928,-0.0133068386,2 1970 | class2,4.4070544213,-0.1468456195,2 1971 | class2,5.1584393845,0.4123207961,2 1972 | class2,5.1699731636,-0.1577586628,2 1973 | class2,5.1837442501,0.3733233865,2 1974 | class2,5.3008949162,0.2027436811,2 1975 | class2,5.1409632307,0.6343586585,2 1976 | class2,3.8896558203,0.31400457,2 1977 | class2,5.2722961451,-0.5639880265,2 1978 | class2,5.4340267876,0.139048386,2 1979 | class2,5.9502147562,-0.9357160227,2 1980 | class2,4.2441220452,-0.4880593504,2 1981 | class2,5.7199110554,-0.2893617502,2 1982 | class2,4.6998507365,-0.4220179685,2 1983 | class2,4.9980623583,0.1531060074,2 1984 | class2,4.3678847877,-0.5818412676,2 1985 | class2,4.6239636135,1.0923225068,2 1986 | class2,5.1420429949,0.3423884775,2 1987 | class2,4.6207493251,0.4403842163,2 1988 | class2,4.1274166129,0.5888643349,2 1989 | class2,5.4336070909,-1.4852429668,2 1990 | class2,4.7349088939,-0.2404323618,2 1991 | class2,5.3614728583,0.0147559939,2 1992 | class2,4.3680644668,0.301546744,2 1993 | class2,5.033820641,0.9423354954,2 1994 | class2,5.408321858,0.1822949991,2 1995 | class2,4.3516070089,0.0618554427,2 1996 | class2,5.1309439673,0.6541188706,2 1997 | class2,4.7903481441,0.1336704898,2 1998 | class2,4.3537002716,-0.1121936235,2 1999 | class2,5.4211232212,-0.4843179155,2 2000 | class2,6.3763284566,-0.8618035288,2 2001 | class2,4.6298643381,-0.2793944362,2 2002 | class3,0.0968252399,-2.5909460151,4 2003 | class3,-1.1921697537,-2.4887564046,3 2004 | class3,-0.8930747941,-1.9586748059,3 2005 | class3,-0.6623537623,-0.8873025869,3 2006 | class3,-1.1873677019,-2.6902533157,3 2007 | class3,-2.2894943627,-3.415361162,4 2008 | class3,-0.4398327979,-2.0811591552,3 2009 | class3,-0.5836003365,-2.8224066687,3 2010 | class3,-0.9140545078,-0.3343595433,3 2011 | class3,-0.588163824,-0.9212567855,3 2012 | class3,-1.6990767225,0.599998327,3 2013 | class3,-0.6008219115,-2.9426202825,4 2014 | class3,0.6941245965,-1.3694951786,4 2015 | class3,0.630871661,-1.5285954884,4 2016 | class3,-1.4197252062,-2.5522317756,3 2017 | class3,-0.7694482786,-1.026191727,3 2018 | class3,-1.2468543089,-2.1990179438,3 2019 | class3,-0.7314497442,-2.9277664857,4 2020 | class3,-0.2330339238,-1.7254952855,3 2021 | class3,-0.9352642196,-2.8593848281,3 2022 | class3,-1.2918111775,-2.710548754,3 2023 | class3,0.6049940652,-2.1481734009,4 2024 | class3,-2.5222028747,-2.0197463957,3 2025 | class3,-1.9971060309,-2.7296561863,3 2026 | class3,-0.8002068202,-3.511194675,4 2027 | class3,-0.0153102299,-1.6505315043,3 2028 | class3,-1.3829733532,-0.5740450272,3 2029 | class3,-1.0218971002,-1.7028980705,3 2030 | class3,-1.9067841857,-2.9845289609,3 2031 | class3,-1.754162873,-1.1028390494,3 2032 | class3,-0.6043982486,-2.2903450913,3 2033 | class3,-0.3553692474,-0.4555121094,3 2034 | class3,-1.2418361675,-1.6736759117,3 2035 | class3,-0.9938872649,-3.3936086887,4 2036 | class3,-0.3212742215,-2.5532575708,3 2037 | class3,-0.1401577272,-0.5831147152,3 2038 | class3,-0.9140692845,-0.762402788,3 2039 | class3,-0.5916117723,-2.6134163757,3 2040 | class3,-2.3888759395,-1.7659072024,3 2041 | class3,-2.3056331934,-2.4131062289,3 2042 | class3,-1.050866122,-3.4127233809,4 2043 | class3,-0.1460945447,-3.6293021788,4 2044 | class3,1.0105055386,-0.0810140986,4 2045 | class3,-1.6791490845,-1.7507536439,3 2046 | class3,-0.5502852201,-1.3543584242,3 2047 | class3,-0.9709718987,-2.9630306515,4 2048 | class3,-0.0051489424,-0.7374690029,3 2049 | class3,-0.8444482861,-2.2614342302,3 2050 | class3,1.0107152628,-2.8912049017,4 2051 | class3,0.0025113688,-3.5678101832,4 2052 | class3,-1.320306793,-2.5576118434,3 2053 | class3,-1.2221638386,-2.0084464494,3 2054 | class3,-1.5776458383,-0.8209331274,3 2055 | class3,-1.0319405155,-2.5241866209,3 2056 | class3,0.1866649137,-3.476068619,4 2057 | class3,-1.9337059566,-1.4082062923,3 2058 | class3,0.0026141794,-2.340575483,3 2059 | class3,-0.2286009415,-1.9785414604,3 2060 | class3,-1.7859522323,-1.1724034402,3 2061 | class3,-0.1539072616,-2.069708058,3 2062 | class3,-0.1433506943,-1.5959435453,3 2063 | class3,0.8872316757,-2.2093165077,4 2064 | class3,-1.5433613308,-0.9919158133,3 2065 | class3,-2.4956454399,-2.375567593,3 2066 | class3,-2.0737404327,-4.8748258254,4 2067 | class3,-0.4586299579,-2.0618043867,3 2068 | class3,0.0775767944,-2.2964543391,3 2069 | class3,0.7684227658,-0.1636376334,4 2070 | class3,-2.254332686,-0.2519723795,3 2071 | class3,0.1015630914,-2.430630466,4 2072 | class3,-0.1158009505,-0.2972960473,3 2073 | class3,-1.5098113876,-1.0015990372,3 2074 | class3,-1.0887600043,-1.0945302935,3 2075 | class3,1.4056132024,-1.8893948619,4 2076 | class3,-1.7368997099,-2.3810218574,3 2077 | class3,-0.4282962027,-2.3624717506,3 2078 | class3,-1.4540799777,-1.5701810595,3 2079 | class3,-1.592554596,-1.4549935881,3 2080 | class3,0.8082569579,-1.6155375537,4 2081 | class3,-0.9426059892,-1.4391472806,3 2082 | class3,-0.6293784952,-2.9101068719,4 2083 | class3,-1.946031201,-3.1569691168,4 2084 | class3,-0.6519602206,-2.5205301539,3 2085 | class3,-2.4196437112,-2.8028442667,3 2086 | class3,-2.3402552654,-1.2907832763,3 2087 | class3,-0.8171603606,-2.8184058552,3 2088 | class3,-1.576274031,-1.4222469591,3 2089 | class3,-0.0772248406,-0.3017830197,3 2090 | class3,-1.7818226264,-2.8837844783,3 2091 | class3,0.0159249436,-1.4183119947,3 2092 | class3,-1.1939490279,-2.0510238878,3 2093 | class3,-1.657175034,-2.3331281732,3 2094 | class3,-1.3790570511,-1.0554528243,3 2095 | class3,0.6921929301,-1.9860072727,4 2096 | class3,-0.2897646875,-2.0822776119,3 2097 | class3,0.0986779648,-1.003481907,3 2098 | class3,0.428769982,-2.1589948843,4 2099 | class3,1.0625953877,-2.8008703164,4 2100 | class3,0.1482068139,-1.5434382985,3 2101 | class3,-0.6497971981,-0.5444656148,3 2102 | class3,-1.3623559482,-1.7682874549,3 2103 | class3,0.2165524575,-2.3803485835,4 2104 | class3,-2.4785478072,-4.1952497197,4 2105 | class3,-0.1555240375,-0.0530819838,3 2106 | class3,0.278828079,-0.3185031254,4 2107 | class3,-1.0183991676,-0.9598710884,3 2108 | class3,-1.4039384947,-0.8789579982,3 2109 | class3,-2.1340559179,-2.7962995485,3 2110 | class3,-1.4445701126,-1.759571857,3 2111 | class3,-2.5390411017,-2.0002229818,3 2112 | class3,-0.9306411407,-0.8260848363,3 2113 | class3,-1.8228732757,-2.3310095553,3 2114 | class3,-0.0956491134,-1.2952341277,3 2115 | class3,-1.988706311,-1.7370695486,3 2116 | class3,-1.2222684989,-0.4031075672,3 2117 | class3,-0.0954284347,-1.2667988843,3 2118 | class3,-1.5917968556,-1.03463993,3 2119 | class3,-1.6001710203,-1.1405261522,3 2120 | class3,0.3293771977,-2.1255984443,4 2121 | class3,-0.9576431595,-0.7385256489,3 2122 | class3,2.2649440361,-0.3786461382,4 2123 | class3,-1.0586224627,-2.5420685516,3 2124 | class3,-1.3888619518,-1.0948257113,3 2125 | class3,-0.3605237614,-2.7876244469,4 2126 | class3,-0.331799814,-3.0484199631,4 2127 | class3,-0.5893206513,-2.4234626647,3 2128 | class3,-0.8084255842,-1.269824065,3 2129 | class3,-0.6877200025,-0.4888658881,3 2130 | class3,-0.5377983711,-1.9939928896,3 2131 | class3,-0.2502574518,-2.4917097305,3 2132 | class3,-0.3520137545,-1.425179418,3 2133 | class3,0.4770584983,-2.3729685368,4 2134 | class3,-0.9784081392,-2.06014244,3 2135 | class3,-1.7879637836,-1.6311905917,3 2136 | class3,-1.3687898517,-0.9890641935,3 2137 | class3,-1.1948662251,-1.4547770691,3 2138 | class3,-2.577829917,-2.7889411473,3 2139 | class3,-1.3776957638,-0.6034649538,3 2140 | class3,-0.1676408724,-1.8199460587,3 2141 | class3,-1.6827657589,-1.2430787047,3 2142 | class3,0.5200814854,-2.4099963575,4 2143 | class3,-0.6904389251,-2.3190018444,3 2144 | class3,-2.7521131412,-3.5531393222,4 2145 | class3,-0.4548583648,-2.1600789236,3 2146 | class3,-1.1673702319,0.215184427,3 2147 | class3,-0.3682833904,-1.6396408857,3 2148 | class3,-2.1050276456,0.2986058895,3 2149 | class3,-0.1626561898,-1.5778007262,3 2150 | class3,-0.9474655529,-1.9826865003,3 2151 | class3,-1.0397877249,-2.5653919186,3 2152 | class3,-1.5337867498,-1.3043597513,3 2153 | class3,0.0310836859,-2.1652004769,3 2154 | class3,-1.9744710788,-3.287518717,4 2155 | class3,-1.6809426579,-1.5652686444,3 2156 | class3,-0.9734341348,0.041008102,3 2157 | class3,0.8990228025,-1.7955592956,4 2158 | class3,-1.6041485095,-2.1281981514,3 2159 | class3,-2.0712896607,-1.2397963867,3 2160 | class3,-1.5640542007,-4.5227131506,4 2161 | class3,-0.207588667,-2.2970707982,3 2162 | class3,-0.7419121406,-4.0029425472,4 2163 | class3,-2.0386726408,-4.6278355399,4 2164 | class3,-1.7773518618,-1.2885936778,3 2165 | class3,1.1169062886,-1.9888121562,4 2166 | class3,-0.2426581742,-1.8968524431,3 2167 | class3,-0.6838550994,-2.1912400094,3 2168 | class3,-1.3631669324,-1.4943913841,3 2169 | class3,-0.6845402865,-1.6563920424,3 2170 | class3,-1.5063003433,-1.0557198147,3 2171 | class3,-0.1706807161,-1.650428054,3 2172 | class3,-0.9130169286,-2.1500855949,3 2173 | class3,-2.2341923735,-1.1917555867,3 2174 | class3,-3.097058863,-1.2965867451,3 2175 | class3,0.2709879155,-1.9070845497,4 2176 | class3,-0.9390435716,-1.5559011323,3 2177 | class3,-0.9692682244,-0.8720529166,3 2178 | class3,-1.4833423423,-1.4756261799,3 2179 | class3,-1.0288468168,-2.6444218185,3 2180 | class3,-1.0065759647,-1.8199666697,3 2181 | class3,-1.8337147153,-1.6781097135,3 2182 | class3,-0.4485103372,-0.0662793198,3 2183 | class3,0.6884152144,-1.5204243746,4 2184 | class3,-1.9257519785,-0.4502357377,3 2185 | class3,-1.0673922094,-3.6220455653,4 2186 | class3,-0.5869981697,-2.3903379034,3 2187 | class3,-2.1458938918,-2.2396171673,3 2188 | class3,-2.6309143509,-1.2074900816,3 2189 | class3,-1.9033445264,-2.1018022274,3 2190 | class3,-1.3208900181,-2.415955801,3 2191 | class3,-0.5648462747,-0.7471461842,3 2192 | class3,-3.4218452254,-0.717920392,3 2193 | class3,-0.2213992568,-2.7099968377,4 2194 | class3,-2.4915474698,-1.3158741762,3 2195 | class3,-1.4606972058,-1.9053411923,3 2196 | class3,-1.3449277954,-1.5216128251,3 2197 | class3,-1.8208243334,-3.0723152439,4 2198 | class3,-2.424035522,-2.5062345633,3 2199 | class3,0.1841672993,-2.6113986354,4 2200 | class3,-0.9044331109,-2.9996217504,4 2201 | class3,0.0280458673,-1.0426444465,3 2202 | class3,-0.5244280479,-1.62597185,3 2203 | class3,-1.1539127202,-0.8600248376,3 2204 | class3,-3.0820961059,-1.8740636421,3 2205 | class3,-1.2583139177,-0.1134613843,3 2206 | class3,-2.0223374802,-2.4193634319,3 2207 | class3,-0.1745919356,-1.4646883572,3 2208 | class3,-1.2917990722,-0.2237276853,3 2209 | class3,-1.5275174814,-3.9304676489,4 2210 | class3,-0.8774884478,0.0287077516,3 2211 | class3,-2.0881573699,-1.3041050623,3 2212 | class3,-1.8928707792,-3.3732757716,4 2213 | class3,-1.7018535158,-0.6461790902,3 2214 | class3,-1.4598914706,-1.5711728078,3 2215 | class3,-0.4746340997,-2.272570005,3 2216 | class3,-1.3564887797,-1.7678965557,3 2217 | class3,-0.6548651054,-0.8779253187,3 2218 | class3,-1.6796482448,-2.9594755119,3 2219 | class3,0.378944463,-1.4699702277,4 2220 | class3,-1.6278536032,-3.0667317662,4 2221 | class3,1.4733067502,0.2223996932,4 2222 | class3,-1.5482717958,-1.3612885974,3 2223 | class3,-1.0683260226,-1.9755065803,3 2224 | class3,-0.6247548103,-1.9865577248,3 2225 | class3,-0.1769162065,-2.2273931919,3 2226 | class3,-1.4106037561,-1.2845837584,3 2227 | class3,-3.1912482978,-1.0951161938,3 2228 | class3,0.9017538528,-1.0809345799,4 2229 | class3,-0.1163900215,-0.275938844,3 2230 | class3,-1.6339415708,-3.2340737682,4 2231 | class3,-1.4589741147,-2.2778438184,3 2232 | class3,-2.3896692465,-1.8862028567,3 2233 | class3,-0.8784856015,-3.2538884101,4 2234 | class3,-1.1306117169,-1.3275787101,3 2235 | class3,-0.7550352077,-2.3770591196,3 2236 | class3,-1.7025980585,-2.8614391519,3 2237 | class3,-2.7472066297,-0.4759186315,3 2238 | class3,-0.3426287082,-2.7452058999,3 2239 | class3,-1.3691711005,-4.3198360084,4 2240 | class3,-0.7648747652,-1.5569101219,3 2241 | class3,-1.0682158588,-1.417078386,3 2242 | class3,-0.6504929477,-2.5479607282,3 2243 | class3,-0.2185845602,-3.0016555135,4 2244 | class3,-2.0900261749,-0.5258210039,3 2245 | class3,0.6151883018,-3.9147676367,4 2246 | class3,-1.0328191238,-3.3852207758,4 2247 | class3,-2.5558773667,-4.4682008751,4 2248 | class3,0.4222134541,-1.8357086547,4 2249 | class3,-0.1360215643,-2.5528475095,3 2250 | class3,-0.6924871877,-1.8345634084,3 2251 | class3,-1.1629233203,-2.2376095012,3 2252 | class3,-0.8495600974,-1.9443681501,3 2253 | class3,-2.3063142714,-2.8357932796,3 2254 | class3,-1.8111517681,-0.8061740086,3 2255 | class3,-0.0008623285,-2.2003544961,3 2256 | class3,-0.3703235096,-1.3256543862,3 2257 | class3,-2.8448240559,-3.2387043362,4 2258 | class3,-0.8223584202,-1.2511004114,3 2259 | class3,-1.291813573,-2.551820848,3 2260 | class3,-0.6902285769,-0.0695938581,3 2261 | class3,-0.8305705174,-3.0334987192,4 2262 | class3,-0.6727188559,-3.5526548452,4 2263 | class3,1.0991087357,-3.0126132162,4 2264 | class3,-2.4611155848,-2.6796393954,3 2265 | class3,0.0882696546,-1.6939554338,3 2266 | class3,0.2810685471,-1.6980447457,4 2267 | class3,-1.0581133202,-1.2314492881,3 2268 | class3,-2.6741843127,-3.0800433722,3 2269 | class3,-2.086395549,-2.4299834904,3 2270 | class3,-0.3668717263,-1.5046408498,3 2271 | class3,-2.4731062452,-1.6342574719,3 2272 | class3,-0.6661739856,-2.117908883,3 2273 | class3,-0.8380573899,-0.8960686287,3 2274 | class3,-0.6765238716,-3.297431773,4 2275 | class3,0.7595373761,-3.5129180532,4 2276 | class3,-1.0824864717,-0.9568936869,3 2277 | class3,-0.2268360229,-3.5239115956,4 2278 | class3,-0.9002029971,-3.2723769957,4 2279 | class3,2.2612621411,-1.416360278,4 2280 | class3,0.1314184066,-1.7155483129,3 2281 | class3,-1.9311337444,-2.0913368298,3 2282 | class3,-2.1027191485,-0.4862260752,3 2283 | class3,0.0534264861,-2.5294512251,4 2284 | class3,0.9430539694,-1.6430693317,4 2285 | class3,-0.4033213257,1.5855348964,1 2286 | class3,-0.8696297704,-3.2780901997,4 2287 | class3,-2.4015992315,-1.4553301416,3 2288 | class3,-0.2983695565,-1.3143475367,3 2289 | class3,-1.3783756861,-2.9187617505,3 2290 | class3,-0.9015956339,-1.6262785928,3 2291 | class3,-0.1560228986,-2.6963994099,4 2292 | class3,-2.8850463003,-1.5408208942,3 2293 | class3,-0.8758996949,-1.6301168372,3 2294 | class3,-2.7008458071,-2.9661742856,3 2295 | class3,-0.25184125,-0.2965585025,3 2296 | class3,-1.4435339778,-3.5928906284,4 2297 | class3,-1.2509133421,-1.8907045236,3 2298 | class3,-2.0033272244,-2.7767808231,3 2299 | class3,-1.3950429301,-0.9196856033,3 2300 | class3,-1.8440559837,-1.5290240752,3 2301 | class3,-0.9877252025,-2.1190819347,3 2302 | class3,-1.6161412873,-1.5011218762,3 2303 | class3,-1.874571054,-2.4768968305,3 2304 | class3,-0.1470210781,-2.9641586332,4 2305 | class3,-1.7900664372,-1.4061255297,3 2306 | class3,-0.7054204058,-2.5109964191,3 2307 | class3,-1.0700205624,-1.9593681835,3 2308 | class3,-2.7321836406,-1.6769535952,3 2309 | class3,-0.8585711228,-3.3877810608,4 2310 | class3,-0.3754219769,-0.5851268597,3 2311 | class3,-0.421538414,-2.7244849522,3 2312 | class3,-1.6989026711,-3.4461981887,4 2313 | class3,-1.0396781304,-1.7592120135,3 2314 | class3,-0.8577044137,-2.6015396096,3 2315 | class3,-1.2425070341,-0.9707537298,3 2316 | class3,-0.4694486056,-0.4865322062,3 2317 | class3,0.2222430683,-2.3781052474,4 2318 | class3,0.1126206626,-0.842723078,4 2319 | class3,-2.4958370639,-1.9730108918,3 2320 | class3,-1.7005944283,-3.3457475414,4 2321 | class3,-1.2066309524,-2.2761878481,3 2322 | class3,-2.0859585552,-3.4903625796,4 2323 | class3,-0.7936389348,-0.1112701712,3 2324 | class3,0.2405950593,-2.4779481214,4 2325 | class3,-1.472032206,-2.8617155068,3 2326 | class3,-0.7295827148,-1.995565646,3 2327 | class3,-1.6929663658,-2.2020106839,3 2328 | class3,-0.1810954517,-1.0786209469,3 2329 | class3,-2.1998244379,-1.9958915474,3 2330 | class3,-1.065979488,-3.9073841976,4 2331 | class3,-0.6309136896,0.1296499242,3 2332 | class3,-0.0258766749,0.2002894245,4 2333 | class3,-1.2339616862,-0.5968852456,3 2334 | class3,-1.9366992223,-3.4584162066,4 2335 | class3,-1.6255787829,-2.8535327597,3 2336 | class3,-0.4148488723,-1.7207394489,3 2337 | class3,1.0342799925,-3.7038147226,4 2338 | class3,-1.7185466274,-3.0366546666,3 2339 | class3,-1.3602935562,-2.4443322425,3 2340 | class3,-1.6603323622,-1.5643931428,3 2341 | class3,-1.2338736111,-1.6148918506,3 2342 | class3,-1.4175097764,-1.2087698663,3 2343 | class3,-0.7762746667,-1.1249578837,3 2344 | class3,0.7327980947,-2.668736586,4 2345 | class3,-1.0867130225,-3.5466444735,4 2346 | class3,-0.1783851936,-2.2440183319,3 2347 | class3,0.178518578,-0.6729417263,4 2348 | class3,-0.0854305008,-2.2523642973,3 2349 | class3,0.634439581,-0.8856232145,4 2350 | class3,-0.6259981031,-3.2494281794,4 2351 | class3,-2.3083467533,-0.8975543223,3 2352 | class3,0.0764907711,-1.2560368578,3 2353 | class3,-2.1383209156,-0.7792958888,3 2354 | class3,-1.3104538906,-1.425848347,3 2355 | class3,-1.2447318245,-0.6784201058,3 2356 | class3,0.3970076114,-2.3999889121,4 2357 | class3,-1.7468878699,-2.9278460634,3 2358 | class3,-0.5237428245,-0.9063077427,3 2359 | class3,0.4115935082,-0.1849304865,4 2360 | class3,-1.5957102797,-2.6864002084,3 2361 | class3,-1.6286702022,-2.3852770636,3 2362 | class3,-0.8855157577,-2.7788541426,3 2363 | class3,-1.2340069863,-2.1512042861,3 2364 | class3,-1.8028152593,-0.4317117124,3 2365 | class3,-0.5799854486,-3.4209586426,4 2366 | class3,-0.5857096602,-1.9644344107,3 2367 | class3,0.0747665134,-2.647111972,4 2368 | class3,0.3875722492,-2.7584477551,4 2369 | class3,-1.1632683323,-2.2680035039,3 2370 | class3,-0.2064225351,-2.2751494781,3 2371 | class3,-2.5293201269,-1.9677155796,3 2372 | class3,-1.9105158964,-2.8842585668,3 2373 | class3,-2.4887296713,-2.5811796569,3 2374 | class3,-1.4672673294,-1.7186157283,3 2375 | class3,-0.1624489186,-1.256272424,3 2376 | class3,-0.0013572982,-1.1787688764,3 2377 | class3,-0.0535934238,-1.1210190796,3 2378 | class3,0.8082294763,-1.3576593634,4 2379 | class3,-1.4459859121,-2.1668738897,3 2380 | class3,-2.1301172768,-3.3379211584,4 2381 | class3,-3.5249995146,-0.8220367115,3 2382 | class3,-0.7781040491,-1.8176944896,3 2383 | class3,-0.6138577581,-2.3045068094,3 2384 | class3,-0.8152520599,-2.4475784367,3 2385 | class3,-1.4946325984,-1.9756849803,3 2386 | class3,0.4436886652,-1.2597176887,4 2387 | class3,-2.026897823,-0.1518035421,3 2388 | class3,1.58334317,-0.6569037336,4 2389 | class3,-0.8960201819,-1.8062982746,3 2390 | class3,-1.28088848,-1.9416035767,3 2391 | class3,0.0577590317,-1.9693454224,3 2392 | class3,-0.9915166031,-1.5918295697,3 2393 | class3,0.2806815279,-2.5139357041,4 2394 | class3,0.6324861542,-1.9140947082,4 2395 | class3,-2.3001248092,-2.5563342989,3 2396 | class3,-0.2273281507,-2.5634593262,3 2397 | class3,-0.7467099113,-2.6293812892,3 2398 | class3,0.1023277245,-1.2283343161,3 2399 | class3,-2.7480162285,-1.330826913,3 2400 | class3,0.134480377,-2.1695255477,3 2401 | class3,-0.5984520527,-0.8764836664,3 2402 | class3,0.6855379002,-1.9963924435,4 2403 | class3,-3.0849424037,-1.7655777574,3 2404 | class3,-1.018529712,-1.3653656495,3 2405 | class3,-1.0940841003,-2.4675352432,3 2406 | class3,-0.7828315069,-2.6882317037,3 2407 | class3,1.5385261311,-0.8600849084,4 2408 | class3,-0.5975173495,-2.0114031062,3 2409 | class3,0.6314441792,-1.6233364549,4 2410 | class3,-1.8857425964,-1.0777969329,3 2411 | class3,-2.3198398584,-2.6592252759,3 2412 | class3,-1.3850905159,-2.6416588267,3 2413 | class3,-1.8627887978,-1.7937314661,3 2414 | class3,-1.429226457,-2.4449494211,3 2415 | class3,-0.4638743576,-3.3303919044,4 2416 | class3,-1.0287822413,-1.0173528881,3 2417 | class3,-1.957276582,-2.4574991693,3 2418 | class3,0.3930498195,-0.9262554443,4 2419 | class3,-1.8268890874,-3.1073877915,4 2420 | class3,0.2463889507,-2.2378843048,4 2421 | class3,-0.3959188595,-1.8709474511,3 2422 | class3,-2.3386833435,-2.5817785847,3 2423 | class3,-0.0915689412,-0.8910691129,3 2424 | class3,0.1252932847,-2.5961778427,4 2425 | class3,-0.4947924345,-4.1881136945,4 2426 | class3,-1.2216701678,-0.9910310922,3 2427 | class3,-0.5371853087,-4.3362271331,4 2428 | class3,0.6026831551,-2.9003856971,4 2429 | class3,-0.2561588205,-2.6734103697,3 2430 | class3,-0.7112046036,-1.928176456,3 2431 | class3,-1.9691321765,-2.541757262,3 2432 | class3,-1.7162304935,-1.1765538667,3 2433 | class3,-1.8645879474,-1.9911652576,3 2434 | class3,-1.1083793226,-2.8022716451,3 2435 | class3,-0.7853836428,-1.5274511961,3 2436 | class3,-0.5037290199,-2.4999690414,3 2437 | class3,-0.2005653413,-1.9485187099,3 2438 | class3,-0.7408934436,-2.0852016148,3 2439 | class3,0.298159298,-2.3460029861,4 2440 | class3,-0.6909039736,0.2780259776,3 2441 | class3,-3.0423310253,-2.8762863364,3 2442 | class3,-2.6124598903,-2.0944018733,3 2443 | class3,-0.2143970247,-1.9232934341,3 2444 | class3,0.0245319213,-1.1144059946,3 2445 | class3,-1.1945649912,-2.1868922527,3 2446 | class3,0.7243771641,-1.1016397298,4 2447 | class3,-2.409017904,-3.1803321634,4 2448 | class3,-1.5275917007,-0.3074308595,3 2449 | class3,-1.320242485,-1.7036560161,3 2450 | class3,-1.6145536791,-2.1352262329,3 2451 | class3,-1.4590298637,-3.4700075936,4 2452 | class3,-1.7767205892,-3.2459374558,4 2453 | class3,-0.1887844477,-2.5594402016,3 2454 | class3,-1.0330622946,-4.3740760982,4 2455 | class3,-3.0627366384,-2.0617457751,3 2456 | class3,-0.4431020326,-3.0666334774,4 2457 | class3,-0.6168149345,-0.810628982,3 2458 | class3,0.586100981,-0.1553398258,4 2459 | class3,-0.7613711728,-2.6047958566,3 2460 | class3,-1.5915189977,-1.7919671887,3 2461 | class3,0.3200342138,-2.2984115672,4 2462 | class3,-1.7754395517,-3.4699750391,4 2463 | class3,-1.4765840575,-1.3880000744,3 2464 | class3,-1.5317533993,-3.0085367893,3 2465 | class3,-1.6930485157,-4.3083367522,4 2466 | class3,-0.639050238,-1.7672606762,3 2467 | class3,-0.8922918742,-2.4797339691,3 2468 | class3,-2.8361473583,-2.3779030141,3 2469 | class3,-0.5646530106,-3.5735936719,4 2470 | class3,-1.826601305,-1.7693031116,3 2471 | class3,-1.0012316273,-2.3939045541,3 2472 | class3,-1.4754878438,-2.530638316,3 2473 | class3,-0.7568251579,-2.7131991848,3 2474 | class3,-0.5312297793,-1.4022899317,3 2475 | class3,-1.7607709076,-0.42032372,3 2476 | class3,-0.544563283,-3.7301639044,4 2477 | class3,-1.0444306669,-1.5370210565,3 2478 | class3,-1.5871367238,-2.2043527006,3 2479 | class3,-1.0645354489,-2.2075869212,3 2480 | class3,-0.0697458421,-1.194789006,3 2481 | class3,-0.1677770631,-1.9982260292,3 2482 | class3,-1.5910379221,-2.3504858219,3 2483 | class3,-1.4357633236,-0.883333845,3 2484 | class3,-0.1492401743,-2.2503908102,3 2485 | class3,-1.1996860286,-2.2467788958,3 2486 | class3,0.2094993575,0.1211410945,4 2487 | class3,-2.3048755151,-2.7892485532,3 2488 | class3,-0.4989003831,-2.4201592427,3 2489 | class3,-0.7097319605,-0.9811438678,3 2490 | class3,-0.1899810759,-0.823430352,3 2491 | class3,-0.5290665256,-2.4477047543,3 2492 | class3,-0.1683636201,-3.2048558999,4 2493 | class3,-1.7434847345,-0.9424266338,3 2494 | class3,0.4831231749,-1.5873792071,4 2495 | class3,-0.7544048057,-1.4503550793,3 2496 | class3,-0.1400844141,-2.5018124569,3 2497 | class3,-1.6960143277,-0.8665979883,3 2498 | class3,0.2262504072,-2.7978401902,4 2499 | class3,-1.0133627771,-1.5425900714,3 2500 | class3,-2.4815993156,-2.2026075483,3 2501 | class3,-0.9823580305,-2.7614234112,3 2502 | class3,-2.0603703542,-0.6922640949,3 2503 | class3,-2.6037632709,-1.2481928877,3 2504 | class3,-0.9958082562,-0.6128789252,3 2505 | class3,-0.5417124387,-1.4716063188,3 2506 | class3,-3.0100136917,-0.6627217364,3 2507 | class3,0.5408118365,-1.4026281583,4 2508 | class3,-0.3221538813,-2.2177508232,3 2509 | class3,-0.5124773872,-2.4921413456,3 2510 | class3,-0.8438770987,-1.377526832,3 2511 | class3,1.2186941681,-1.2339661252,4 2512 | class3,-1.1768325873,-1.1101636434,3 2513 | class3,-0.9734165556,-3.2404127238,4 2514 | class3,-1.0334369123,-2.9512974373,3 2515 | class3,-1.0096793024,-0.3820162901,3 2516 | class3,-1.1731155198,-1.6246162502,3 2517 | class3,-0.810249451,-1.6367970888,3 2518 | class3,-2.3296976014,-1.7737415815,3 2519 | class3,-1.1239595111,-0.6262680782,3 2520 | class3,-0.8058414472,-0.7544442897,3 2521 | class3,-2.5477391716,-1.2858853846,3 2522 | class3,-0.7888986562,-1.8264199219,3 2523 | class3,-1.4131804672,-2.4374817835,3 2524 | class3,-0.3079624655,-2.2605239966,3 2525 | class3,-2.8127220194,-2.8280087474,3 2526 | class3,-0.3950734548,-3.7119219796,4 2527 | class3,-1.6102550219,-0.7122671785,3 2528 | class3,-1.4688014943,-1.6637908239,3 2529 | class3,-1.0134248762,-2.9052614872,3 2530 | class3,-0.7916607914,-2.1773836878,3 2531 | class3,-1.2867302358,-0.1827011948,3 2532 | class3,-2.6718087696,-1.8433491052,3 2533 | class3,-0.1732597806,1.2347231542,1 2534 | class3,-2.6763961627,-1.5193591551,3 2535 | class3,-1.1553938431,-1.2724669964,3 2536 | class3,-1.313030468,-0.6859852821,3 2537 | class3,-0.8902779529,-1.0183255942,3 2538 | class3,-1.5178535947,-1.8346945666,3 2539 | class3,-1.1473979237,-1.5544341021,3 2540 | class3,-1.4847449933,-4.0828990646,4 2541 | class3,-1.3775537185,-1.8795693906,3 2542 | class3,-2.5898016155,-1.1622043737,3 2543 | class3,-0.8836009447,-2.2223494556,3 2544 | class3,-0.6179844963,-2.4336063292,3 2545 | class3,-1.8518585299,-3.7042173631,4 2546 | class3,0.1807558531,-1.3488283883,4 2547 | class3,-1.3088048095,-2.1989787048,3 2548 | class3,0.7384258993,-0.2769748441,4 2549 | class3,-2.1166918292,-1.9213066988,3 2550 | class3,-3.3598895848,-2.1373413467,3 2551 | class3,-2.022243659,-4.0341968585,4 2552 | class3,-2.7201839992,-2.6630060484,3 2553 | class3,-0.6358363175,-1.6611145676,3 2554 | class3,0.1606657035,-2.9573295386,4 2555 | class3,-1.3563626409,-1.6093538825,3 2556 | class3,-1.1454337308,-1.3320443133,3 2557 | class3,-1.3284334936,-2.630673834,3 2558 | class3,0.0488638784,-1.3229092062,3 2559 | class3,0.7820383924,-0.3992527849,4 2560 | class3,-2.1249128881,-1.5602666325,3 2561 | class3,0.1736821131,-2.2860875251,4 2562 | class3,-1.1061093891,-2.8671313918,3 2563 | class3,-0.9081745719,-1.2824823001,3 2564 | class3,0.9553027934,-2.7812544357,4 2565 | class3,-1.9595780229,-2.5652282159,3 2566 | class3,-0.5452845679,-2.3175044099,3 2567 | class3,-1.7732225221,-1.3544858532,3 2568 | class3,-1.8793431649,-3.5680326531,4 2569 | class3,-1.5159128758,-1.4792142306,3 2570 | class3,-0.4197915954,-1.2188791161,3 2571 | class3,0.0249049677,-2.5455544826,4 2572 | class3,0.1774574953,-2.9945763509,4 2573 | class3,-2.5405492158,-1.2985075215,3 2574 | class3,-1.1531386818,-3.8043874756,4 2575 | class3,1.2885473488,-2.652630116,4 2576 | class3,-1.1523013029,-1.3076830601,3 2577 | class3,-1.8768095755,-2.3813116531,3 2578 | class3,-1.9140790042,-1.7858772874,3 2579 | class3,-0.2453941485,-0.9024076623,3 2580 | class3,0.0883286432,-1.8024887508,3 2581 | class3,-1.6639079183,-1.7336631461,3 2582 | class3,-0.3804153485,-2.2341330326,3 2583 | class3,-1.976450055,-0.4251925748,3 2584 | class3,0.7647196535,-0.5676153159,4 2585 | class3,-0.3600761761,-3.2413344027,4 2586 | class3,-0.4449296181,-2.6562988323,3 2587 | class3,-0.8433954651,-1.8056264876,3 2588 | class3,-0.3651595837,-1.9644195039,3 2589 | class3,-2.9002642897,0.5067962334,3 2590 | class3,-0.3882916124,-1.2948883755,3 2591 | class3,-1.4330645707,-2.8209597576,3 2592 | class3,-2.7070202046,-3.6437454326,4 2593 | class3,-0.3336395421,-0.9578679886,3 2594 | class3,-0.9058477951,-1.7768308149,3 2595 | class3,-2.0553491882,-1.0479881125,3 2596 | class3,-1.3115762803,-2.6727209447,3 2597 | class3,-0.0367208492,-2.705686056,4 2598 | class3,-1.2966859827,-1.1402665618,3 2599 | class3,-1.4438978916,-2.5108115961,3 2600 | class3,-2.409949614,-1.9049800785,3 2601 | class3,-1.5012093906,-2.6023821282,3 2602 | class3,-0.6931527928,-0.5066480929,3 2603 | class3,-1.3309882005,-1.8653123376,3 2604 | class3,-1.6129784774,-2.7054016881,3 2605 | class3,-1.5899216144,-1.8523829854,3 2606 | class3,-0.0338783898,-3.1436217321,4 2607 | class3,-0.9253735314,-1.3320057598,3 2608 | class3,-0.2944089514,-1.1242409042,3 2609 | class3,-1.5520264243,-1.5758988486,3 2610 | class3,0.932416145,-2.4005595466,4 2611 | class3,0.5316866128,0.1746322741,4 2612 | class3,-1.1987021762,-1.7657455249,3 2613 | class3,0.5721411573,-2.8482201389,4 2614 | class3,-0.2040711495,-3.0141252989,4 2615 | class3,-2.0880392171,-1.414257122,3 2616 | class3,-3.7514835928,-1.7104212998,3 2617 | class3,-1.7730140447,-4.0472298616,4 2618 | class3,-1.5822633538,-1.8252697182,3 2619 | class3,-0.6900206258,-0.6619757897,3 2620 | class3,-2.48006771,-0.7121090703,3 2621 | class3,-0.1622074165,0.1194488873,3 2622 | class3,-1.5607370297,-1.0264210927,3 2623 | class3,-0.8936409826,-1.8103036425,3 2624 | class3,-0.2704664491,-1.4107362823,3 2625 | class3,0.1684328183,0.1195372292,4 2626 | class3,-0.575316532,-1.0609813698,3 2627 | class3,-1.9854051323,-2.6203119623,3 2628 | class3,0.003582782,-3.8624355173,4 2629 | class3,-1.1885311848,-2.4910630505,3 2630 | class3,-1.5126243272,-0.957441204,3 2631 | class3,-0.6212506413,-4.2131343791,4 2632 | class3,-1.0617621472,-3.5881994663,4 2633 | class3,-1.9574572064,-2.8263708814,3 2634 | class3,0.181307298,-1.3605381854,4 2635 | class3,-1.0499118593,-0.9393286742,3 2636 | class3,-0.7227963824,-0.9879860829,3 2637 | class3,-2.7199178328,-1.6214109232,3 2638 | class3,-1.4787946001,-3.5352918412,4 2639 | class3,-1.2239900618,-0.2058468455,3 2640 | class3,-1.336192072,-0.975379145,3 2641 | class3,1.7758152395,-1.01871983,4 2642 | class3,-1.6255454897,-1.3868855031,3 2643 | class3,0.6154762466,-1.3372010996,4 2644 | class3,2.0865662068,-1.5998900432,4 2645 | class3,-0.8881191145,-0.9630608317,3 2646 | class3,-1.947324629,-2.2976113338,3 2647 | class3,-2.5644024752,-1.2037745387,3 2648 | class3,-0.658716912,-0.3351202096,3 2649 | class3,-1.9742724424,-3.4186136038,4 2650 | class3,0.4228976279,-2.4455888376,4 2651 | class3,-1.7402274154,-2.4313836959,3 2652 | class3,-1.1981614096,-3.1915198994,4 2653 | class3,-1.1659087225,-2.4033756997,3 2654 | class3,-1.2829653836,-2.2883060829,3 2655 | class3,-0.1986418255,-2.0476965076,3 2656 | class3,-0.4726961416,-1.8341299512,3 2657 | class3,-1.2877707005,0.6613719319,3 2658 | class3,-2.3904348528,-0.5504224304,3 2659 | class3,-1.2671892995,-1.9657210285,3 2660 | class3,0.3271453749,-2.3441477585,4 2661 | class3,-1.3833484161,-1.0749148808,3 2662 | class3,-2.3086820128,-3.4570577974,4 2663 | class3,-0.5032181462,-3.0697066095,4 2664 | class3,-0.7257757861,-2.6480987237,3 2665 | class3,-2.1327015729,-1.5176715931,3 2666 | class3,0.7155431243,-1.87578263,4 2667 | class3,-0.6835821227,-1.8362146079,3 2668 | class3,-0.6949357104,-2.495936493,3 2669 | class3,-1.2482817313,-2.7865071824,3 2670 | class3,-2.3466295116,-3.1715716334,4 2671 | class3,-0.6391525604,-3.3174500544,4 2672 | class3,-0.0265276305,-0.8018736183,3 2673 | class3,-1.5458480546,-0.6344838425,3 2674 | class3,0.1730852148,-0.9432337124,4 2675 | class3,0.2049792506,-2.6891430843,4 2676 | class3,-1.9125094,-1.5955565298,3 2677 | class3,-0.6097578656,-2.9850077867,4 2678 | class3,-1.8910664427,-2.2471633572,3 2679 | class3,-0.5741016504,-2.5118966501,3 2680 | class3,-0.7675545598,-2.2046755811,3 2681 | class3,0.8893899061,-3.3476370004,4 2682 | class3,0.1656735143,-2.3744299541,4 2683 | class3,-1.5995519121,-2.0659044754,3 2684 | class3,0.0518487004,-2.837892775,4 2685 | class3,-0.7039240406,-0.537916868,3 2686 | class3,-2.1928841262,-3.6057932862,4 2687 | class3,-0.9601593034,-3.7787935101,4 2688 | class3,-1.6964602565,-0.4260394182,3 2689 | class3,-0.5679323901,-1.5279155418,3 2690 | class3,-0.9767804837,-2.679520279,3 2691 | class3,-2.0479416742,-1.9599010436,3 2692 | class3,-0.1948759567,-1.7475123268,3 2693 | class3,-0.3395462722,-1.6031238862,3 2694 | class3,-0.908420351,-1.7369410079,3 2695 | class3,0.094002725,-1.9444487941,3 2696 | class3,-1.9079281344,-1.572998288,3 2697 | class3,-1.5996402527,-2.9555239405,3 2698 | class3,-0.8275499183,-2.745238356,3 2699 | class3,-0.9982778222,-1.7059711476,3 2700 | class3,-0.5119457413,-1.7023775565,3 2701 | class3,-1.1188244298,-1.9465443015,3 2702 | class3,0.0848319406,-0.2578921535,4 2703 | class3,0.9752607185,-0.9566048094,4 2704 | class3,-0.3650545109,-1.0633562061,3 2705 | class3,-0.9291875844,-1.202808884,3 2706 | class3,0.5632644638,-3.210506614,4 2707 | class3,-1.8137997009,-0.705906468,3 2708 | class3,0.6182417237,-2.7832356792,4 2709 | class3,-0.3000820942,-1.7710990625,3 2710 | class3,1.0505925575,-2.0814419245,4 2711 | class3,-2.1105204362,-3.46812392,4 2712 | class3,-0.8182102118,-3.0664761228,4 2713 | class3,-0.1629210041,-1.5199635786,3 2714 | class3,0.8895418586,-1.1803545129,4 2715 | class3,-2.6185735149,-1.0439219997,3 2716 | class3,-0.9321732044,-0.6296694291,3 2717 | class3,0.4434879018,-0.8604742602,4 2718 | class3,0.119408899,-2.3513925583,4 2719 | class3,-1.8492468884,-2.546382192,3 2720 | class3,-1.4835628365,0.4088191372,3 2721 | class3,-3.2948583814,-2.1891058718,3 2722 | class3,-3.3198145197,-3.1923370797,4 2723 | class3,-1.3838600886,-4.1168257253,4 2724 | class3,-0.5717104221,-1.3871917535,3 2725 | class3,-1.1183776274,-0.875433436,3 2726 | class3,1.1274116609,-1.3222087581,4 2727 | class3,-0.8465303956,-2.04293481,3 2728 | class3,-0.4504606376,-2.6851583251,3 2729 | class3,-0.8692702864,-2.1220777284,3 2730 | class3,-2.0045440724,-0.9875140925,3 2731 | class3,-1.2788258942,-0.4970810116,3 2732 | class3,-1.2426437978,-1.1994364478,3 2733 | class3,-2.9623756305,-1.084131372,3 2734 | class3,-0.7701013296,-2.0993521387,3 2735 | class3,-1.2356008723,-1.9410937169,3 2736 | class3,-0.4372835698,-2.5144230108,3 2737 | class3,-3.0493896899,-2.0469425424,3 2738 | class3,-2.3647195767,-1.5369541214,3 2739 | class3,0.5908654039,-0.2037883886,4 2740 | class3,-1.0931692709,-1.3760076039,3 2741 | class3,-1.8766797694,-0.4282334225,3 2742 | class3,-1.6780766614,-2.6176913656,3 2743 | class3,0.8518760038,-1.2150170475,4 2744 | class3,-0.7262531375,-0.6949201055,3 2745 | class3,-1.7295064105,-1.1957339122,3 2746 | class3,-0.6214079955,-1.1680061367,3 2747 | class3,-1.1186982731,-1.8710830226,3 2748 | class3,-0.487113899,-3.720527833,4 2749 | class3,-0.3354331436,-1.7678551694,3 2750 | class3,-1.8176803997,-3.0411834886,3 2751 | class3,-0.9680421106,-1.917777089,3 2752 | class3,-0.8566997972,-1.3449954907,3 2753 | class3,-0.8647604488,-2.753531098,3 2754 | class3,-1.3124008627,-1.0983345078,3 2755 | class3,-0.7471452729,-1.4515057697,3 2756 | class3,-0.4195217694,-2.9525211743,4 2757 | class3,-0.9475480357,-1.197515926,3 2758 | class3,-0.7713041705,-2.6536042433,3 2759 | class3,-1.5248400216,-3.9610747279,4 2760 | class3,-1.0869251983,-2.4608898564,3 2761 | class3,-2.9483139446,-1.8595060012,3 2762 | class3,-0.1803566866,-2.3382332793,3 2763 | class3,0.5001952881,-1.9450056409,4 2764 | class3,0.10647392,-0.6960029521,4 2765 | class3,-1.4545614031,-2.1748833008,3 2766 | class3,0.1200804895,-2.1015900604,3 2767 | class3,-1.1849509731,-2.2094095635,3 2768 | class3,0.0323031767,-3.0947856548,4 2769 | class3,-1.145669531,-2.0670803093,3 2770 | class3,-0.4057617778,-1.1793459902,3 2771 | class3,-0.5898641525,-2.3411022615,3 2772 | class3,-3.1895273105,-2.7529240755,3 2773 | class3,-0.4414084146,-2.4419219176,3 2774 | class3,-1.6354177583,-1.3205487118,3 2775 | class3,-0.8300465787,-2.0677164616,3 2776 | class3,-1.7949743339,-1.4196592939,3 2777 | class3,0.8260520895,-2.3776776068,4 2778 | class3,-0.4873377278,-2.3679308447,3 2779 | class3,-1.9221373578,-1.8901073331,3 2780 | class3,-0.3396589573,-1.7485495301,3 2781 | class3,-0.6516794333,-1.901704475,3 2782 | class3,-0.0504859375,-2.9621874217,4 2783 | class3,-1.83901657,-1.7381390277,3 2784 | class3,-1.7391118004,-2.1516521284,3 2785 | class3,-2.0591107723,-2.8182142408,3 2786 | class3,-1.6473247008,-0.7875621186,3 2787 | class3,-0.1415412023,-3.4021529309,4 2788 | class3,0.8070832746,-2.8697423907,4 2789 | class3,0.3242065939,-0.9712866299,4 2790 | class3,-1.856632847,-1.3977163036,3 2791 | class3,-1.6664154802,-1.9461272158,3 2792 | class3,-1.2161645487,-2.0193237775,3 2793 | class3,-1.5098689542,-1.1553480135,3 2794 | class3,0.1318069394,-0.3690450887,4 2795 | class3,-1.6569067152,-2.1432958291,3 2796 | class3,-0.6050538034,-0.8981863996,3 2797 | class3,-1.1906123968,-1.6502820197,3 2798 | class3,-0.339369503,-3.4563806357,4 2799 | class3,-1.3403356428,-2.2129111868,3 2800 | class3,-0.4157597873,-2.3471670144,3 2801 | class3,-1.8488810233,-2.7693828489,3 2802 | class3,-1.7768267871,-2.1058354208,3 2803 | class3,-1.4421637466,-1.9431359213,3 2804 | class3,-1.1152543374,-0.8386637809,3 2805 | class3,0.0525529801,-2.777216843,4 2806 | class3,-0.7462997361,-1.6139239229,3 2807 | class3,-0.8154231903,-3.3209246697,4 2808 | class3,-0.6394043818,-1.2770520937,3 2809 | class3,-2.2678688553,-1.8979970444,3 2810 | class3,-1.1239861301,-2.6984595969,3 2811 | class3,-0.3945075591,-2.7473148266,3 2812 | class3,-1.4411313201,-0.7252113816,3 2813 | class3,-1.6963226454,-0.8671385587,3 2814 | class3,-0.4008639263,-0.7481739938,3 2815 | class3,-1.4959873,-2.4731009636,3 2816 | class3,-1.1066824892,-1.3331209608,3 2817 | class3,-1.3343719334,-2.0974607714,3 2818 | class3,-0.0556593707,-1.4316219129,3 2819 | class3,0.0106636917,-1.2076965594,3 2820 | class3,-1.2638449708,0.0924500182,3 2821 | class3,-2.2008802561,-1.9878144786,3 2822 | class3,-0.5500918986,-2.1932606403,3 2823 | class3,-1.3293925979,-3.0713948776,4 2824 | class3,0.4646593308,-2.2638218212,4 2825 | class3,-0.2532487857,-1.3050270348,3 2826 | class3,-1.8486541189,-2.4975610368,3 2827 | class3,-1.5380742892,-1.8253289529,3 2828 | class3,-1.7903765334,-4.548977222,4 2829 | class3,-0.0619842384,-3.6753112213,4 2830 | class3,-2.145867538,-1.5707027199,3 2831 | class3,-0.1960884079,-0.6167321452,3 2832 | class3,-2.4126786414,-2.6571461418,3 2833 | class3,-1.8208593015,-1.6411098333,3 2834 | class3,-0.6361069741,-4.2595343501,4 2835 | class3,-2.1429424871,-3.6224824218,4 2836 | class3,0.1555675419,-1.2877651753,4 2837 | class3,0.0097121979,-1.4980748931,3 2838 | class3,-1.8137991193,-0.0315761598,3 2839 | class3,-1.2080978033,-0.2916379413,3 2840 | class3,-0.8591414539,-3.0130789663,4 2841 | class3,-0.7838039832,-2.7140462183,3 2842 | class3,-2.5074837171,-1.396866194,3 2843 | class3,-2.557241924,-1.9383328778,3 2844 | class3,-0.9847020614,-1.549028688,3 2845 | class3,-1.052266164,-1.5892730941,3 2846 | class3,-3.4316782325,-1.8470987473,3 2847 | class3,-1.367719402,-1.550406619,3 2848 | class3,-1.156647699,-1.4342911611,3 2849 | class3,-1.4307800618,-1.1747789851,3 2850 | class3,-0.6704253947,-3.0674889944,4 2851 | class3,-0.6872281361,-2.4276268093,3 2852 | class3,-0.0955512459,-1.1848615926,3 2853 | class3,-0.9938478295,-1.1292006896,3 2854 | class3,-0.4850742907,-1.251154386,3 2855 | class3,-1.4728331408,-3.2747165388,4 2856 | class3,-2.6373581024,-1.3185428165,3 2857 | class3,-0.2937390908,-2.1005895752,3 2858 | class3,-2.0093697231,-1.7992576489,3 2859 | class3,-0.9435277171,-1.2732140677,3 2860 | class3,1.1756146294,-1.5672195509,4 2861 | class3,0.6432006986,-2.6210597052,4 2862 | class3,0.1095434643,-0.6229743154,4 2863 | class3,-1.9535091488,-3.375643018,4 2864 | class3,-0.4317151729,-2.9713605271,4 2865 | class3,-0.7157744972,-2.1654736578,3 2866 | class3,-0.2627987219,-1.3725318774,3 2867 | class3,-0.1655755938,-3.8525504279,4 2868 | class3,-2.5861449728,-4.4545886492,4 2869 | class3,-0.9954549302,-0.4335198491,3 2870 | class3,-1.160537049,-2.3250397719,3 2871 | class3,0.7486383092,-2.8859835295,4 2872 | class3,-2.2069447978,-0.365944056,3 2873 | class3,-1.9782622892,-0.0981905464,3 2874 | class3,-1.441296141,-1.1791188223,3 2875 | class3,-0.2757069705,-1.1639989457,3 2876 | class3,-0.707238265,-1.4968562646,3 2877 | class3,-0.7184176598,-1.4243017887,3 2878 | class3,-0.3754106818,-2.3223446513,3 2879 | class3,-1.3876787169,-2.005836185,3 2880 | class3,-0.1496538951,-2.1266829558,3 2881 | class3,-1.9240402519,-1.8303513317,3 2882 | class3,-0.633094828,-1.5314093702,3 2883 | class3,-1.1345497372,-1.970816327,3 2884 | class3,-0.6927915357,-2.8325673047,3 2885 | class3,-0.879203213,-2.2835564023,3 2886 | class3,-1.4000132526,-2.2842927929,3 2887 | class3,-3.5594623229,-2.815403945,3 2888 | class3,-1.4785427138,-2.1615468283,3 2889 | class3,-1.4480740265,-2.4637758014,3 2890 | class3,-0.9916483892,-2.9862137124,4 2891 | class3,-1.9692850743,-0.5913316245,3 2892 | class3,-1.6866810849,-1.9045267529,3 2893 | class3,-1.7091555617,-3.8568741615,4 2894 | class3,-0.9606320621,-1.6981474935,3 2895 | class3,-0.7453200376,-2.0748014777,3 2896 | class3,-1.1212048325,-1.5849018882,3 2897 | class3,-0.0501280274,-1.2484760758,3 2898 | class3,-0.119624181,-3.124799471,4 2899 | class3,-2.5075386554,0.0233128608,3 2900 | class3,0.3390719653,-1.5131335307,4 2901 | class3,-0.9870682858,-3.2149932302,4 2902 | class3,-0.4317262322,-2.7195370949,3 2903 | class3,-0.6805944751,-2.2079340016,3 2904 | class3,-2.0561964583,-0.8713254582,3 2905 | class3,-0.6432078464,-0.560567567,3 2906 | class3,-0.2181530568,-1.7928305749,3 2907 | class3,-2.2767505582,-1.5686658495,3 2908 | class3,-0.2607891953,-3.0425708453,4 2909 | class3,-0.6778576437,-1.6711727472,3 2910 | class3,-0.6327720745,-4.5644671655,4 2911 | class3,-0.425529754,-1.8486812912,3 2912 | class3,-0.8002560143,-0.6706220764,3 2913 | class3,0.9818145653,-3.1314542019,4 2914 | class3,0.0436327537,-2.098046546,3 2915 | class3,-2.8215955873,-2.8202060975,3 2916 | class3,-0.1018144694,-1.7545895452,3 2917 | class3,-0.994654184,-2.1373029318,3 2918 | class3,-2.1639321844,-2.7041888894,3 2919 | class3,-2.783270408,0.1031928167,3 2920 | class3,-0.0830539131,-2.4958186232,3 2921 | class3,-1.8370785983,-3.9970793716,4 2922 | class3,-0.4382607494,-2.3363459175,3 2923 | class3,-0.4076856233,-2.9145821206,4 2924 | class3,-0.7442369241,-2.8753128215,3 2925 | class3,-0.1038602042,-0.5524461627,3 2926 | class3,-0.3094222393,-3.7032292814,4 2927 | class3,-2.4174766146,-2.5476291545,3 2928 | class3,-0.2490738108,-2.7383427379,4 2929 | class3,0.0941740015,-4.6580363289,4 2930 | class3,-2.1019755971,-0.9022408491,3 2931 | class3,-0.6378987012,-0.091717483,3 2932 | class3,-2.0176911777,-1.7854633603,3 2933 | class3,-1.71544242,-2.7291060099,3 2934 | class3,-0.8023037049,-1.1380243296,3 2935 | class3,-0.2980701669,-1.8144160551,3 2936 | class3,-0.8737567713,-2.1106376286,3 2937 | class3,-1.3490293341,-1.0014369289,3 2938 | class3,-1.4846444837,-4.0680071732,4 2939 | class3,-0.6135793816,-1.1745085324,3 2940 | class3,-0.8448298743,-0.7171932083,3 2941 | class3,-0.8776675091,-1.3281689023,3 2942 | class3,-2.0322248833,-0.502561183,3 2943 | class3,-0.206941535,-1.8757183522,3 2944 | class3,0.9508422735,-0.7923852035,4 2945 | class3,0.1951905147,-2.4606405128,4 2946 | class3,-1.1953070025,-2.201434015,3 2947 | class3,-2.3890732375,-0.5057026932,3 2948 | class3,-1.645087194,-1.7167221523,3 2949 | class3,-1.0905729778,-1.9883019263,3 2950 | class3,-0.1026549296,-1.5873644647,3 2951 | class3,-1.5479703468,-2.0085204111,3 2952 | class3,-0.5998405161,-1.5100617002,3 2953 | class3,-0.8801446901,-3.3763130064,4 2954 | class3,-1.0859271105,-3.3050187345,4 2955 | class3,-0.4951043926,-5.2043456844,4 2956 | class3,-2.0714608654,-0.8289602649,3 2957 | class3,-1.0378240803,-2.0262513741,3 2958 | class3,-1.3628453057,-1.9398545566,3 2959 | class3,-2.0818990254,-3.1986083781,4 2960 | class3,-0.0519809704,-2.2779206782,3 2961 | class3,-0.3272735061,-1.1740570408,3 2962 | class3,-0.7382273089,1.4828647112,1 2963 | class3,0.1717349304,-1.8461452126,3 2964 | class3,1.1662413124,-1.6710278848,4 2965 | class3,0.2565297218,-1.5915989505,4 2966 | class3,-0.1200947753,-2.6069845045,4 2967 | class3,-0.6387948353,-1.7704444799,3 2968 | class3,-2.5403238327,-2.8581830399,3 2969 | class3,-1.2056792181,-1.9032371658,3 2970 | class3,-2.3311952472,-2.7660606004,3 2971 | class3,-1.6190325079,-3.4467006774,4 2972 | class3,-0.3682564697,-2.4875069619,3 2973 | class3,0.7377816493,0.2359701001,4 2974 | class3,-3.5254078165,-0.3985681083,3 2975 | class3,-2.1903961488,-1.7986212649,3 2976 | class3,-0.7298195583,-2.8754632146,3 2977 | class3,1.4120499752,-3.7386622399,4 2978 | class3,-3.1404725457,-2.4914409994,3 2979 | class3,-1.0235214026,-2.1118010751,3 2980 | class3,-1.1081400704,-2.5199968199,3 2981 | class3,0.5083179753,-1.4203028834,4 2982 | class3,-0.7049621598,-0.5376774373,3 2983 | class3,-1.6280099962,-1.4405374541,3 2984 | class3,-2.443314425,-1.1195019995,3 2985 | class3,-1.7422276126,-1.6298068727,3 2986 | class3,0.3142223329,-3.5106120555,4 2987 | class3,-0.2867901119,-1.736318456,3 2988 | class3,-1.3265572204,-1.6368080736,3 2989 | class3,-2.6162195432,-3.6821934516,4 2990 | class3,0.3410309772,-1.9311560212,4 2991 | class3,-1.4885753275,-1.0773539087,3 2992 | class3,-0.4059731464,-4.1907625448,4 2993 | class3,-0.3627821138,-2.2433273866,3 2994 | class3,-0.0297634773,-1.9434183961,3 2995 | class3,-1.0453938917,-1.2909733966,3 2996 | class3,1.0604243387,-0.0953980532,4 2997 | class3,-0.9250300818,-1.907160673,3 2998 | class3,-0.1193969179,-2.042978175,3 2999 | class3,-0.991571438,-1.9491733637,3 3000 | class3,-2.5411977362,-1.0187357842,3 3001 | class3,-1.7593950732,-4.3629439358,4 3002 | # Next is listed the parameters of each of the Gaussians considered in the model. 3003 | # 1 : mean(x) = 2.9600, mean(y) = 1.9480, cov(x,x) = 1.030, cov(y,y) = 0.208 and cov(x,y) = cov(y,x) = 0.059 3004 | # 2 : mean(x) = 4.9764, mean(y) = -0.0013, cov(x,x) = 0.221, cov(y,y) = 0.254 and cov(x,y) = cov(y,x) = -0.005 3005 | # 3 : mean(x) = -1.1434, mean(y) = -1.7663, cov(x,x) = 0.846, cov(y,y) = 0.789 and cov(x,y) = cov(y,x) = -0.061 3006 | # 4 : mean(x) = -0.6809, mean(y) = -2.2150, cov(x,x) = 0.971, cov(y,y) = 1.158 and cov(x,y) = cov(y,x) = 0.352 3007 | # 5 : mean(x) = 2.6407, mean(y) = 2.1989, cov(x,x) = 0.759, cov(y,y) = 0.288 and cov(x,y) = cov(y,x) = -0.119 3008 | # 6 : mean(x) = 3.8022, mean(y) = 1.9109, cov(x,x) = 0.228, cov(y,y) = 0.358 and cov(x,y) = cov(y,x) = 0.032 3009 | --------------------------------------------------------------------------------