% INPUTS:
% data = MxN matrix, where M = observations and N = features
% labels = Mx1 matrix with the true labels of each observation
% k = nearest neighbor value for relieff algorithm
% kFold = fold value for Cross Validation

% OUTPUTS: the classifier's performance statistic


%% Version 1.0
function [output] = mVIBES(data, classifier, k, fold, isDependent)
    X = table2array(data(:,1:end-1));
    Y = categorical(data.Class);
    [~, col] = size(X);
   
    [ranked, ~] = relieff(X, Y, k);
    hPredictions = generateModels(X, Y, col, ranked, classifier, fold, isDependent);
    [ePrediction, index] = generateEnsemble( Y, hPredictions);
    output = performanceSummary( Y, ePrediction, index );
    performanceSummary(output);
end