function K = kmer_wildcard_kernel(S,k,maxw,lambda) %function K = kmer_wildcard_kernel(S,k,maxw,lambda) % % Computes the k-mer wildcard kernel between the strings stored in S; % w wildcards are allowed. The features are weighted by an % exponential lambda^-m, where m is the actual number of wildcards for % that feature. % %INPUTS % S = a cell array containing all strings % k = an integer indicating the size of the k-mer % maxw = an integer 0 K=K+lambda*iterates(S,newind_wildcard,newind_wildcard,1,k,1,maxw,lambda,alphabet); end function K=iterates(S,indstart,indend,it,maxit,nw,maxw,lambda,alphabet) %function K=iterates(S,indstart,indend,it,maxit,nw,maxw,lambda,alphabet) % % A help function for kmer_wildcard_kernel.m % % %Author: Tijl De Bie, march 2004. na=length(alphabet); nS=length(S); if it==maxit for i=1:nS number(i,1)=length(indend{i}); end K=number*number'; return end K=zeros(nS,nS); for i=1:na ct=0; present=[]; clear newindstart newindend newS for j=1:nS newindstart_store=[]; newindend_store=[]; for k=1:length(indstart{j}) if S{j}(indend{j}(k)+1)==alphabet(i) newindstart_store=[newindstart_store ; indstart{j}(k)]; newindend_store=[newindend_store ; indend{j}(k)+1]; end end if ~isempty(newindend_store) ct=ct+1; newindstart{ct}=newindstart_store; newindend{ct}=newindend_store; present=[present ; j]; newS{ct}=S{j}; end end if ct~=0 K(present,present)=K(present,present)... +iterates(newS,newindstart,newindend,it+1,maxit,nw,maxw,lambda,alphabet); end end if nw