function [ITr2 ITe2 NFS] = fs10(P, PT, T) % Feature Selector function 10 (irrelevant to 1, 2 & 3) % A variation of Feature Selector 6. Here features are added and prunned at % the same time, until the optimum feature set is found. Only difference with % fs6: IDND6 is used instead of IDND4. % Requirements: IDND6.m % This function has been optimised % Copyright by Zack Voulgaris, London, April-September 2007 sT = size(T); [N ind] = max(sT); % Number of elements [r na] = size(P); if r ~= N error('Dimensionality of Input and Output do not match!') end [r c] = size(PT); if c ~= na error('Dimensionality of Input and Output do not match!') end if sT(3-ind) ~= 1 error('Target Training must be a vector') end [q Q] = nc(T); % ID0 = IDND6(P, T); % Original ID % RR = sprintf ('%0.5g', 100*ID0); % ['Original IDND: ' RR '%'] % Building up starts here Itemp = P(:,1); FS = 1; % IDtemp = IDND6(Itemp,T); AF = 2:na; % Available Features naf = na - 1; % Number of Available Features ff = 1; flag = 1; tempID = zeros(1,naf); for i = 1:naf temp = [Itemp P(:,AF(i))]; tempID(i) = IDND6(temp,T,q,Q); end [M ind] = max(tempID); FS = [FS AF(ind)]; ff = ff + 1; naf = naf - 1; Itemp = [Itemp P(:,AF(ind))]; IDtemp = M; AF(ind) = []; clear temp tempID = zeros(1,ff); for i = 1:ff temp{i} = Itemp; temp{i}(:,i) = []; tempID(i) = IDND6(temp{i},T,q,Q); end [M ind] = max(tempID); if M >= IDtemp ff = ff - 1; naf = naf + 1; AF = [AF FS(ind)]; FS(ind) = []; Itemp(:,ind) = []; IDtemp = M; end clear temp while flag == 1 for i = 1:naf temp = [Itemp P(:,AF(i))]; tempID(i) = IDND6(temp,T,q,Q); end [M ind] = max(tempID); if M > IDtemp FS = [FS AF(ind)]; ff = ff + 1; naf = naf - 1; Itemp = [Itemp P(:,AF(ind))]; AF(ind) = []; IDtemp = M; else flag = 2; break end for i = 1:naf temp = [Itemp P(:,AF(i))]; tempID(i) = IDND6(temp,T,q,Q); end [M ind] = max(tempID); if M > IDtemp FS = [FS AF(ind)]; ff = ff + 1; naf = naf - 1; Itemp = [Itemp P(:,AF(ind))]; AF(ind) = []; IDtemp = M; else flag = 0; end clear temp tempID = zeros(1,ff); for i = 1:ff temp{i} = Itemp; temp{i}(:,i) = []; tempID(i) = IDND6(temp{i},T,q,Q); end [M ind] = max(tempID); if M >= IDtemp ff = ff - 1; naf = naf + 1; AF = [AF FS(ind)]; FS(ind) = []; Itemp(:,ind) = []; IDtemp = M; end end if flag == 2 clear temp tempID = zeros(1,ff); for i = 1:ff temp{i} = Itemp; temp{i}(:,i) = []; tempID(i) = IDND6(temp{i},T,q,Q); end [M ind] = max(tempID); if M >= IDtemp ff = ff - 1; naf = naf + 1; AF = [AF FS(ind)]; FS(ind) = []; Itemp(:,ind) = []; IDtemp = M; end end NFS = FS; ITr2 = Itemp; ITe2 = PT(:,NFS); % RR = sprintf ('%0.5g', 100*IDtemp); % ['Reduced Feature Set IDND: ' RR '%']