close all
clear all
clc
%% Nacteni dat testovaci mnoziny
load path.mat
load(fullfile(PathName2,FileName2));
load(fullfile(PathName2,FileName3));
load(fullfile(PathName2,FileName4));
load(fullfile(PathName2,FileName5));
%rozdeleni podle mista mereni - AF,AP,ATP
for misto_n=1:4
    switch misto_n
        case 1
            vstup = testovaci.test_AF(:,1:3);
            zarazeni_pac = testovaci.ID_test_AF(:,4);
            misto = 'AF - a. femoralis';
            tren = trenovaci.tren_AF(:,1:3);
            zarazeni_train = trenovaci.ID_tren_AF(:,4);
        case 2
            vstup = testovaci.test_AP(:,1:3);
            zarazeni_pac = testovaci.ID_test_AP(:,4);
            misto = 'AP - a. poplitea';
            tren = trenovaci.tren_AP(:,1:3);
            zarazeni_train = trenovaci.ID_tren_AP(:,4);
        case 3
            vstup = testovaci.test_ATP(:,1:3);
            zarazeni_pac = testovaci.ID_test_ATP(:,4);
            misto = 'ATP - a. tibialis posterior';
            tren = trenovaci.tren_ATP(:,1:3);
            zarazeni_train = trenovaci.ID_tren_ATP(:,4);
        case 4
            vstup = testovaci.test_LEG(:,1:18);
            zarazeni_pac = testovaci.ID_test_LEG(:,6);
            misto = 'LEG - AF+AP+ATP';
            tren = trenovaci.tren_LEG(:,1:18);
            zarazeni_train = trenovaci.ID_tren_LEG(:,6);
    end    
%% Vypocet clusteru pro kazde misto mereni zvlast    
    IDX = [];
%     [IDX(:,misto_n),C]=kmeans(vstup,3,'distance','cityblock','start',start(misto_n+2*(misto_n-1):3*misto_n,1:3,:),...
%         'emptyaction','drop','replicates',size(start,3));
%     [IDX(:,misto_n)] = classify(vstup,tren,zarazeni_train,'linear'); %diaglinear 25,20,20 WO 31,20,19
    IDX(:,misto_n) = knnclassify(vstup,tren,zarazeni_train, 1,...
    'euclidean','nearest'); %13,10,11 chyba !!!
%     IDX(:,misto_n) = clusterdata(vstup,'distance','chebychev','linkage','weighted',...
%         'maxclust',3,'criterion','distance');    
%% 2D a 3D zobrazeni klasifikovanych dat
    figure(1) %3D zobrazeni (3 HK)
    subplot(2,2,misto_n)
%     scatter3(vstup(:,1),vstup(:,2),vstup(:,3),50,IDX,'filled');hold on
    vstup_o = vstup(IDX(:,misto_n)==1,:); % kolečka
    plot3(vstup_o(:,1),vstup_o(:,2),vstup_o(:,3),'ob');
    hold on;
    vstup_x = vstup(IDX(:,misto_n)==2,:); % křížky
    plot3(vstup_x(:,1),vstup_x(:,2),vstup_x(:,3),'xm');
    vstup_v = vstup(IDX(:,misto_n)==3,:); % trojuhelnicky
    plot3(vstup_v(:,1),vstup_v(:,2),vstup_v(:,3),'vk');
    xlabel('Prvni HK');
    ylabel('Druha HK');
    zlabel('Treti HK');
    hold off; grid on;
    title(misto);
    if misto_n==4
        set(figure(1),'NumberTitle','off','Name','Zobrazeni hlavnich komponent');
    end
    
    figure(2) %2D zobrazeni (2 HK)
    subplot(2,4,misto_n)
%     scatter(vstup(:,1),vstup(:,2),100,zarazeni_pac,'filled'); hold on
    vstup_o = vstup(zarazeni_pac==1,:); % kolečka
    plot(vstup_o(:,1),vstup_o(:,2),'ob');
    hold on;
    vstup_x = vstup(zarazeni_pac==2,:); % křížky
    plot(vstup_x(:,1),vstup_x(:,2),'xm');
    vstup_v = vstup(zarazeni_pac==3,:); % trojuhelnicky
    plot(vstup_v(:,1),vstup_v(:,2),'vk');
    xlabel('Prvni HK');
    ylabel('Druha HK');
    zlabel('Treti HK');
    hold off; grid on;
    title(['Testovaci mnozina: ',misto]);
    
    figure(2) %2D zobrazeni (2 HK)
    subplot(2,4,misto_n+4)
%     scatter(vstup(:,1),vstup(:,2),100,IDX(:,misto_n)); hold on
    vstup_o = vstup(IDX(:,misto_n)==1,:); % kolečka
    plot(vstup_o(:,1),vstup_o(:,2),'ob');
    hold on;
    vstup_x = vstup(IDX(:,misto_n)==2,:); % křížky
    plot(vstup_x(:,1),vstup_x(:,2),'xm');
    vstup_v = vstup(IDX(:,misto_n)==3,:); % trojuhelnicky
    plot(vstup_v(:,1),vstup_v(:,2),'vk');
    xlabel('Prvni HK');
    ylabel('Druha HK');
    hold off; grid on;
    title(['Klasifikovana data: ',misto]);
    
    if misto_n==4
        set(figure(2),'NumberTitle','off','Name','Zobrazeni HK - Testovaci mnozina a klasifikovana data');
    end
    
%% Zobrazeni testovacich dat jak to ma vypadat        
    figure(3) %2D zobrazeni (2 HK)
    subplot(2,4,misto_n)
%     scatter(vstup(:,1),vstup(:,2),100,zarazeni_pac,'filled'); hold on
    vstup_o = vstup(zarazeni_pac==1,:); % kolečka
    plot(vstup_o(:,1),vstup_o(:,2),'ob');
    hold on;
    vstup_x = vstup(zarazeni_pac==2,:); % křížky
    plot(vstup_x(:,1),vstup_x(:,2),'xm');
    vstup_v = vstup(zarazeni_pac==3,:); % trojuhelnicky
    plot(vstup_v(:,1),vstup_v(:,2),'vk');
    xlabel('Prvni HK');
    ylabel('Druha HK');
    zlabel('Treti HK');
    hold off; grid on;
    title(['Testovaci mnozina: ',misto]);

%% Zobrazeni klasifikovanych mnozin pro porovnani ve figuru 3
    figure(3)
    subplot(2,4,misto_n+4)
%     scatter(vstup(:,1),vstup(:,2),100,IDX(:,misto_n),'filled');hold on
    hold on;
    vstup_or = vstup(zarazeni_pac==1&IDX(:,misto_n)==1,:); % správně klasifikovaná kolečka zelene
    plot(vstup_or(:,1),vstup_or(:,2),'go');
    vstup_xr = vstup(zarazeni_pac==2&IDX(:,misto_n)==2,:); % správně klasifikované křížky zelene
    plot(vstup_xr(:,1),vstup_xr(:,2),'gx');
    vstup_vr = vstup(zarazeni_pac==3&IDX(:,misto_n)==3,:); % správně klasifikované trojuhelnicky zelene
    plot(vstup_vr(:,1),vstup_vr(:,2),'gv');
   
    vstup_ow = vstup(zarazeni_pac==1&IDX(:,misto_n)~=1,:); % špatně klasifikovaná kolečka cervene
    plot(vstup_ow(:,1),vstup_ow(:,2),'ro');
    vstup_xw = vstup(zarazeni_pac==2&IDX(:,misto_n)~=2,:); % špatně klasifikované křížky cervene
    plot(vstup_xw(:,1),vstup_xw(:,2),'rx');
    vstup_vw = vstup(zarazeni_pac==3&IDX(:,misto_n)~=3,:); % správně klasifikované trojuhelnicky zelene
    plot(vstup_vw(:,1),vstup_vw(:,2),'rv');

%     plot(C1(:,1),C1(:,2),'+b','MarkerSize',15,'LineWidth',2)
%     plot(C2(:,1),C2(:,2),'+m','MarkerSize',15,'LineWidth',2)
%     plot(C3(:,1),C3(:,2),'+k','MarkerSize',15,'LineWidth',2)
    
    xlabel('Prvni HK');
    ylabel('Druha HK');
    hold off; grid on;
    title(['Klasifikovana data: ',misto]);
    
    if misto_n==4
        set(figure(3),'NumberTitle','off','Name','Zobrazeni HK - Testovaci mnozina a klasifikovana data');
    end
    
%% Urceni chybovosti  
    chyby = sum(zarazeni_pac~=IDX(:,misto_n));
    spravne = length(zarazeni_pac)-chyby; % pocet spravne zarazenych
    chybovost = 100*fix(10000*chyby/length(IDX(:,misto_n)))/10000; %chybovost se zaokrouhlenim na 4 des mista 
    fprintf('|| %s ||\n',misto);
    fprintf('Spravne klasifikace:   %3.0f\n',spravne); 
    fprintf('Nespravne klasifikace: %3.0f\n',chyby); 
    fprintf('Chybovost:             %3.2f%%\n',chybovost);
    fprintf('--------------------------------------------\n'); 

end
