clc
clear
close all 

% Load the data set

%path_data='/Users/mohamedbennasar/Documents/OU_Project/TM358/Block6 activiies/UCI DATA/wine.csv';
%path_data='/Users/mohamedbennasar/Documents/OU_Project/TM358/Block6 activiies/UCI DATA/UCI data for FS/waveform-+noise.csv';
%path_data='/Users/mohamedbennasar/Documents/OU_Project/TM358/Block6 activiies/UCI DATA/UCI data for FS/Austarian.csv';
path_data='/Users/mohamedbennasar/Documents/OU_Project/TM358/Block6 activiies/UCI DATA/Credit-screening(crx).csv';


T = readtable(path_data);
Data_set = table2array(T); % convert table to array 
[m,n]=size(Data_set);
%% Dimentionality reduction pre-processing stage

% Pearson correlation coefficient
Correlation=zeros(n-1,1);

for i=1:n-1
    
    Coefficient=corrcoef(Data_set(:,i),Data_set(:,n));
    Correlation(i)=Coefficient(1,2);
end

[Sorted_Correlation, Feature_CC]=sort(Correlation,'descend');
% Normalised Mutual information 
folder_path='/Users/mohamedbennasar/Dropbox/JMIM/MI/';
addpath('/Users/mohamedbennasar/Dropbox/JMIM/MI/');
save('/Users/mohamedbennasar/Documents/My teaching stuff/AI/Temp.mat');
  CMIT(folder_path)

load('/Users/mohamedbennasar/Documents/My teaching stuff/AI/Temp.mat');

partialScore=zeros(n-1,1);

for i=1: n-1
    
    partialScore(i) = (mi(Data_set(:,i),Data_set(:,n)));
end

[Sorted_MI, Feature_MI]=sort(partialScore,'descend');

Temp=Data_set(:,1:end-1);

Class=Data_set(:,n);





%% Classification 

Selected_features= Feature_CC;

Temp=Data_set(:,1:end-1);
Class=Data_set(:,n);
folds=5;
cp = classperf(Class);



Classiciaction_Accu=zeros(n-1,1);

    indices = crossvalind('Kfold',Class(:),folds);
        
       
for j=1:n-1
    

    for i = 1:folds
        clear nbSVM 
       test = (indices == i); train = ~test;
     
        Training_Features=Temp(train,Selected_features(1:j));
        Testfeatures=Temp(test,Selected_features(1:j));
        Y=Class(logical(train));
        
        
       % nb=fitcknn(Training_Features,Y,'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski', 'Standardize',1);
       
         t = templateSVM('KernelFunction','rbf','KernelScale', 'auto', 'Standardize', 1);
        
          nb = fitcecoc(Training_Features,Y,'Learners',t);
                 
          Predicted_ac =predict(nb,Testfeatures);
          classperf(cp,Predicted_ac,test);
      
          
    end    
     Classiciaction_Accu(j)=cp.CorrectRate;
     
     
     
     
end
 

    %% plot the accuracy 
    
     figure('Name','SVM','NumberTitle','off'); 
      plot(Classiciaction_Accu(1:n-1,1)*100)
      [Val_SVM Indx]=max(Classiciaction_Accu(1:n-1))
      grid on
      xlabel('Number of features ') % x-axis label
      ylabel('Classification accuracy')
      title('SVM')

     
      