Skip to main content

matlab cross validation with svm [draft not final]



function test

clc;
matPos = csvread('pos.dat');
noPos= size(matPos,1);
noFeature = size(matPos,2);
labelPos= ones(noPos,1);
% matPos= [matPos labelPos ];

matNeg = csvread('neg.dat');
noNeg= size(matNeg,1);
labelNeg= -1*ones(noNeg,1);
% matNeg= [matNeg labelNeg ];

% svmStruct = svmtrain(featureInTrain,featureOutTrain,'kernel_function','linear'  , 'options' ,smo_opts); %,'rbf_sigma',100,'boxconstraint',25

noFold=5;
c = cvpartition([labelPos ; labelNeg],'kfold', noFold);
strArray = java_array('java.lang.String', 2);
strArray(1) = java.lang.String('1');
strArray(2) = java.lang.String('-1');

myorder = cell(strArray)

f = @(xtr,ytr,xte,yte) confusionmat(yte,@(xtr,ytr,xte)crossfun(xtr,ytr,xte, exp(z(1)),exp(z(2))),'order', [1 -1] );
cfMat = crossval(f,[matPos; matNeg], [ labelPos ; labelNeg],'partition',c);
cfMat = reshape(sum(cfMat),3,3)


minfn = @(z)crossval('mcr',[matPos; matNeg], [ labelPos ; labelNeg],...
    'Predfun', @(xtrain,ytrain,xtest)crossfun(xtrain,ytrain,xtest, exp(z(1)),exp(z(2))), ...
    'partition',c   );
 

opts = optimset('TolX',5e-4,'TolFun',5e-4);
[searchmin fval] = fminsearch(minfn,randn(2,1),opts)

load('fisheriris');
y = species;
X = meas;
order = unique(y); % Order of the group labels
cp = cvpartition(y,'k',10); % Stratified cross-validation

f = @(xtr,ytr,xte,yte)confusionmat(yte,classify(xte,xtr,ytr),'order',order);

cfMat = crossval(f,X,y,'partition',cp);
cfMat = reshape(sum(cfMat),3,3)



display('done')
end





function yfit = crossfun(xtrain,ytrain,xtest, rbf_sigma,boxconstraint)

% Train the model on xtrain, ytrain,
% and get predictions of class of xtest
svmStruct = svmtrain(xtrain,ytrain, 'boxconstraint',boxconstraint, ...
    'Kernel_Function','rbf','rbf_sigma',rbf_sigma );
    %'kernel_function','linear'  , 'options' ,smo_opts );
  %  'Kernel_Function','rbf','rbf_sigma',rbf_sigma, );
  
 
yfit = svmclassify(svmStruct,xtest);

yfit

end







Comments

Popular posts from this blog

Running openmp in eclipse

As we know to run openmp in gcc , C++ project we have to compile it with g++ -fopenmp option. To configure this with eclipse you just need to add -fopenmp under GCC C++ linker command option

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 partition     selectedKfoldSen=[];selectedKfoldSpe=[];selectedKfoldAcc=[];     indexSen=1;indexSpe=1;indexAcc=1;     if ( kfold == (P+N) )% leave one out         sensitivity = sum(cvtp) /( sum(cvtp) + sum(cvfn) )         specificity = sum(cvtn) /( sum(cvfp) + sum(cvtn) )         acc

R tutorial

Install R in linux ============ In CRAN home page, the latest version is not available. So, in fedora, Open the terminal yum list R  --> To check the latest available version of r yum install R --> install R version yum update R --> update current version to latest one 0 find help ============ ?exact topic name (  i.e.   ?mean ) 0.0 INSTALL 3rd party package  ==================== install.packages('mvtnorm' , dependencies = TRUE , lib='/home/alamt/myRlibrary/')   #  install new package BED file parsing (Always use read.delim it is the best) library(MASS) #library(ggplot2) dirRoot="D:/research/F5shortRNA/TestRIKEN/Rscripts/" dirData="D:/research/F5shortRNA/TestRIKEN/" setwd(dirRoot) getwd() myBed="test.bed" fnmBed=paste(dirData, myBed, sep="") # ccdsHh19.bed   tmp.bed ## Read bed use read.delim - it is the  best mybed=read.delim(fnmBed, header = FALSE, sep = "\t", quote = &q