%Výpočet nejlepších příznaků (mRMR) a ověření na klasifikátoru kNN
%Vstup: "K_muz.xls", "P_muz.xls"
%Výstup:  
  %cislo_priznaku- číslo příznaku, který byl vybrán pomocí mRMR
  %nazev_priznaku- název příznaku, který byl vybrán pomocí mRMR
  %label_priznaku- label, ve kterém se vybraný příznak nachází
  %uspesnost_rozpoznani- procento úspěšnosti určení vybraného příznaku
  %pomocí klasifikátoru kNN

%d- matice m x n, kde m jsou zkoumané osoby a n jsou jednotlivé příznaky
%F- vektor m x 1, který určí do které skupiny zkoumaná osoba patří
%K- počet nejlepších příznaků, které chceme získat 

clear all
clc

lab= {'7.1_1_a','7.1_1_e','7.1_1_i','7.1_1_o','7.1_1_u','7.1_2_a','7.1_2_e',...
    '7.1_2_i','7.1_2_o','7.1_2_u','ParkinsonPr'};
A=[];
B=[];
uspesnost_rozpoznani1=[]

K = length(lab);  %pocet labelu v jednotlivych nahravkach
   for c = 1:K   %cyklus pro label  
     
[ndata, text, alldata] = xlsread('P_muz.xls',lab{c});
[ndata1, text1, alldata1] = xlsread('K_muz.xls',lab{c});
   
A=[A,ndata];
B=[B,ndata1];
   end
   d=[A;B];


l1=length(ndata(:,1));
l2=length(ndata1(:,1));
TR=[];
for m1=1:l1
    TR=[TR;1]; %[1,1,1,1,1,2,2,2,2,2,2,2,2,2]
end
for m2=1:l2
    TR=[TR;2];
end
F=TR;

K=30;

priznaky= mrmr_mid_d(d, F, K);

%--------------------------------------------------
for x=1:10
    if x==1
        pokA=A(3:8,1:455);
        pokA1=A(9:11,1:455);
        pokB=B(3:8,1:455);
        pokB1=B(9:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==2
        pokA=A(1:1,1:455);
        pokA1=A(4:11,1:455);
        pokB=B(1:1,1:455);
        pokB1=B(4:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==3
        pokA=A(1:2,1:455);
        pokA1=A(5:11,1:455);
        pokB=B(1:2,1:455);
        pokB1=B(5:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==4
        pokA=A(1:3,1:455);
        pokA1=A(6:11,1:455);
        pokB=B(1:3,1:455);
        pokB1=B(6:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==5
        pokA=A(1:4,1:455);
        pokA1=A(7:11,1:455);
        pokB=B(1:4,1:455);
        pokB1=B(7:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==6
        pokA=A(1:5,1:455);
        pokA1=A(8:11,1:455);
        pokB=B(1:5,1:455);
        pokB1=B(8:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==7
        pokA=A(1:6,1:455);
        pokA1=A(9:11,1:455);
        pokB=B(1:6,1:455);
        pokB1=B(9:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==8
        pokA=A(1:7,1:455);
        pokA1=A(10:11,1:455);
        pokB=B(1:7,1:455);
        pokB1=B(10:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==9
        pokA=A(1:8,1:455);
        pokA1=A(11:11,1:455);
        pokB=B(1:8,1:455);
        pokB1=B(11:11,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end
    
    if x==10
        pokA=A(1:7,1:455);
        pokA1=A(8:9,1:455);
        pokB=B(1:7,1:455);
        pokB1=B(8:9,1:455);
        pokA3=[pokA;pokA1];
        pokB3=[pokB;pokB1];
    end

  X=[];
  XK=[];
  
for p=1:30
traindata1=pokA3(:,priznak(p)) %trenovaci mnozina parkinsonu
traindata2=pokB3(:,priznak(p)); %trenovaci mnozina kontrolnich
traindata=[traindata1;traindata2];

l1=length(traindata1);
l2=length(traindata2);
TR=[];
for m1=1:l1
    TR=[TR;1]; %[1,1,1,1,1,2,2,2,2,2,2,2,2,2]
end
for m2=1:l2
    TR=[TR;2];
end
trainlabels=TR;
k=1;


if x==1
for p1=1:2 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=1:2 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==2
for p1=2:3 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=2:3 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==3
for p1=3:4 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=3:4 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==4
for p1=4:5 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=4:5 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==5
for p1=5:6 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=5:6 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==6
for p1=6:7 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=6:7 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==7
for p1=7:8 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=7:8 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==8
for p1=8:9 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=8:9 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==9
for p1=9:10 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=9:10 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

if x==10
for p1=10:11 %cyklus pro testovaci mnozinu parkinsonu 
%testovaci data
testdata1=A(p1,priznak(p)); %nemocny jedinec 

C=knn(traindata,trainlabels,k, testdata1);

X(p1,p)=C;
end

for p2=10:11 %cyklus pro testovaci mnozinu kontrolnich
%testovaci data
testdata2=B(p2,priznak(p)); %zdravy jedinec
CK=knn(traindata,trainlabels,k, testdata2);

XK(p2,p)=CK;
end
end

end

%procentualni uspesnost parkinsonu
procentualni_uspesnost=[];
for p=1:30
    
O=X(:,p);
v1{p}=find(O==1);
v2=length(v1{p});
U=XK(:,p);
u1{p}=find(U==2);
u2=length(u1{p});
cel=((v2+u2)/4)*100; 
procentualni_uspesnost=[procentualni_uspesnost,cel];
end
uspesnost_rozpoznani=procentualni_uspesnost';
uspesnost_rozpoznani1=[uspesnost_rozpoznani1,uspesnost_rozpoznani];
end

SUMA=[];
for y=1:30
   rad=uspesnost_rozpoznani1(y,:);
   d=sum(rad)/10;
    SUMA= [SUMA;d];
end


[C,I]=max(SUMA);


pr={'F0_median','F0_mean','F0_std','F0_min','F0_max','F0_max_min','relF0VR','relF0SD','voicing_frac',...
'jitter_local','jitter_localabs','jitter_rap','jitter_ppq5','jitter_ddp','hnr_aut','hnr_nh','hnr_hn',...
'F1_mean','F1_var','F1_std','F1_max','F1_min','F1_med','F1_max_min','F1b_mean','F1b_var','F1b_std','F1b_max',...
'F1b_min','F1b_med','F1b_max_min','F2_mean','F2_var','F2_std','F2_max','F2_min','F2_med','F2_max_min',...
'F2b_mean','F2b_var','F2b_std','F2b_max','F2b_min','F2b_med','F2b_max_min'};
pr1={'VSA','lnVSA','FCR','VAI','F2i/F2u'};

pr1=[pr,pr,pr,pr,pr,pr,pr,pr,pr,pr,pr1];
priznaky=[];
labely=[];
l=[];
for p=1:45
   l=[l,lab(1)]; 
end

for p=1:45
     l=[l,lab(2)]; 
end

for p=1:45
     l=[l,lab(3)]; 
end

for p=1:45
     l=[l,lab(4)]; 
end

for p=1:45
     l=[l,lab(5)]; 
end

for p=1:45
     l=[l,lab(6)]; 
end

for p=1:45
     l=[l,lab(7)]; 
end

for p=1:45
     l=[l,lab(8)]; 
end

for p=1:45
     l=[l,lab(9)]; 
end

for p=1:45
     l=[l,lab(10)]; 
end

for p=1:5
     l=[l,lab(11)]; 
end

for p=1:30
   
    PP=priznak(p);
    PPP=pr1(PP);
    priznaky= [priznaky, PPP];
    
    LLL=l(PP);
    labely=[labely, LLL];
   
end

cislo_priznaku=priznak';
nazev_priznaku=priznaky';
label_priznaku=labely';
uspesnost_rozpoznani=procentualni_uspesnost';
