% Chargement des données
iris = load('Données/iris.txt');

% On prend les longueurs et largeurs
x = iris(:,4:5);

% On prend les classes
y = iris(:,1);
y = y + 1;

% Tri du lot de données en 3 classes
Yp = kmeans(x,3);

% Matrice de confusion entre sortie réelle et prédite
C = confusionmat(y, Yp)

% Calcul de la précison
acc = trace(C)/sum(C(:));

%----------------------------------------------------
% Tri du lot de données en 3 classes
% Mais avec l'initialisation manuelle

init1 = [0 0; 0 0; 0 0];
init2 = [0 0; 2.5 5; 5 10];
init3 = [0 0; 2.5 1.5; 5 2.5]; % Le plus efficace

YpInit = kmeans(x, 3, 'EmptyAction', 'drop', 'start', init3);
% Drop indique de ne rien faire si l'algo rencontre un cluster vide

% Matrice de confusion entre sortie réelle et prédite
CInit = confusionmat(y, YpInit)

% Calcul de la précison
accInit = trace(CInit)/sum(CInit(:));

%----------------------------------------------------
% Tri du lot de données en 3 classes
% Mais avec la distance de Manathan
YpMan = kmeans(x, 3, 'Distance', 'cityblock', 'start', init3);

% Matrice de confusion entre sortie réelle et prédite
CMan = confusionmat(y, YpMan)

% Calcul de la précison
accMan = trace(CMan)/sum(CMan(:));
% Encore mieux avec ce calcul de distance

%----------------------------------------------------
% Visualisation des arbres de décisions
view(SimpleTreeIris.ClassificationTree,'Mode','graph');
view(MediumTreeIris.ClassificationTree,'Mode','graph');

