Skip to main content

MATLAB som

% 1 4 5 7 -- sample 1
% 2 5 6 6 -- sample 2

% in cndx = you will get  the position of each training sample in cluster no
% as SOM takes each sample as a column we need to transpose feature before applying on SOM

%  -------  train -----------
trainFeature = [ 1 2  ; 4 5    ; 5 6 ; 7 6 ]; % Two training data with 4 feature each . So each column is a sample
net = newsom(  trainFeature'  ,[2 2] ); % 4 cluster
net.trainParam.epochs = 100;
[net,tr,Y,E,Pf,Af] = train(net, trainFeature'  );
distances = dist( trainFeature  ,net.IW{1}' );
[d,cndx_train ] = min(distances,[],2); % cndx gives the cluster index, d gives the distance
cndx_train % the position of each training sample in cluster no


bookKeep=zeros(SOMd1 * SOMd2 ,2);%one column for +ve,one column for -ve
    for c=1: totTrain
        index = cndx_train(c);
        if(c<=totPosTrain)
            bookKeep( index,1) = bookKeep( index,1) + 1; %+ve sample
        else
            bookKeep( index,2) = bookKeep( index,2) + 1; %-ve sample
        end
    end
    dlmwrite('clusterInfo',bookKeep,'\t');

% ---------  test  -------------

out = sim(net, featureInTest' );
% format: clusterNo*testSample : 0 0 0 1 0 0 0 0 % that means 4th sample in this custer;
% outFormat (clusterNo, serial )

     out = out'; % #testSample * clusterNo 
    dlmwrite('out',out,'\t');
    for c=1:totTest
      
        clusterNo(c) = find( out(c ,:) );     
        if c<=totPosTest
            origLabel(c) = 1;
        else
            origLabel(c) = -1;
        end
      
    end
    dlmwrite('predicted',[origLabel' clusterNo'],'\t');

Comments

Popular posts from this blog

MATLAB cross validation

// use built-in function samplesize = size( matrix , 1); c = cvpartition(samplesize,  'kfold' , k); % return the indexes on each fold ///// output in matlab console K-fold cross validation partition              N: 10    NumTestSets: 4      TrainSize: 8  7  7  8       TestSize: 2  3  3  2 ////////////////////// for i=1 : k    trainIdxs = find(training(c,i) ); %training(c,i);  // 1 means in train , 0 means in test    testInxs  = find(test(c,i)       ); % test(c,i);       // 1 means in test , 0 means in train    trainMatrix = matrix (  matrix(trainIdxs ), : );    testMatrix  = matrix (  matrix(testIdxs  ), : ); end //// now calculate performance %%  calculate performance of a partiti...

MATLAB confusion matrix

%  test_class  & predicted_class must be same dimension % 'order' - describes the order of label. Here labels are 'g' as positive and 'h' as negative [C,order] = confusionmat( test_class(1: noSampleTest), predicted_class, 'order', ['g' ;'h'] ) tp = C(1,1); fn = C(1,2); fp = C(2,1); tn = C(2,2); sensitivity = tp /( tp + fn ) specificity = tn /( fp + tn ) accuracy = (tp+tn) / (tp+fn+fp+tn) tpr = sensitivity fpr = 1-specificity precision = tp /( tp + fp ) fVal = (2*tpr*precision)/(tpr+precision)

Feature subset selection Using Genetic Algorithm in MATLAB

function callGeneticAlgo global mat global trainInd global testInd [trainInd,~,testInd] = dividerand(1420,0.7,0,0.3); global counter global errList counter = 1; errList = []; fileName=  '../features/alltopPNPDMF.feature' ; mat = load(fileName); [x,fval,exitflag,output,population,score] = gaFeaSelection(1588,100,10800); % param1 = #feature excludig label % param2 =  population size % param3 = sec to test (3 hour = 10800 sec) dlmwrite('selected.GA',x,'delimiter','\n'); display('Done'); end function [x,fval,exitflag,output,population,score] = gaFeaSelection (nvars,PopulationSize_Data,TimeLimit_Data) % This is an auto generated MATLAB file from Optimization Tool. % Start with the default options options = gaoptimset; % Modify options setting options = gaoptimset(options,'PopulationType', 'bitString'); options = gaoptimset(options,'PopulationSize', PopulationSize_Data); options = gaoptimset(options,'TimeLimit', T...