Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Lacoin Achille
ASI4
Commits
0882d90b
Commit
0882d90b
authored
Sep 11, 2018
by
Lacoin Achille
Browse files
ajout du TP1 d'IML
parents
Changes
7
Hide whitespace changes
Inline
Side-by-side
Semestre1/IML/TP/TP1/TP1.m
0 → 100644
View file @
0882d90b
clear
clc
load
(
'WhiteW.mat'
);
% 1// Prise en main des données
% Moyennes
moyX
=
mean
(
X
);
% Variances
varX
=
var
(
X
);
% Pour savoir les différentes catégories : unique(Y)
% Pour compter le nombre de 0 dans Y : sum(Y==0)
% On peut aussi utiliser hist(var)
hist
(
Y
)
% On obtient 1640 '0' et 3258 '1'
boxplot
(
X
)
% moyenne, mediane, varicance ==> Stat univariée
imagesc
(
corrcoef
(
X
)),
colorbar
,
set
(
gca
,
'fontsize'
,
20
)
%==> Stat bivariée
%% 2// Mise en place de la classification des données
% 2.1// Découpage des données
% Trois groupes : Apprentissage, Test et Validation
[
xapp
,
yapp
,
xtest
,
ytest
]
=
splitdata
(
X
,
Y
,
1
/
3
);
figure
(
1
)
hist
(
yapp
)
[
xapp
,
yapp
,
xVal
,
yVal
]
=
splitdata
(
xapp
,
yapp
,
1
/
2
);
figure
(
2
)
hist
(
yVal
)
% On obtient les mêmes proportions que dans l'échantillon de base
% 2.2// Méthode des k plus proches voisins
% IMPERATIF :: Choisir le K sur la validation jamais sur l'apprentissage
errVal
=
erreursPrediction
(
xapp
,
yapp
,
xVal
,
50
,
yVal
)
figure
(
2
)
plot
(
errVal
)
% Dessine le coefficient de prédiction avéré en fonction du choix de k
[
min
,
k
]
=
min
(
errVal
)
% On trouve l'erreur la plus basse avec K = 8
% On teste cette valeur de k sur l'ensemble de test
yValPred
=
kppv
(
xtest
,
xapp
,
yapp
,
k
,[])
errValFin
=
mean
(
ytest
~=
yValPred
)
% On choisit k = 7, l'erreur est égale à 0.34
% 2.3// Influence de la normalisation des données
%
mapp
=
mean
(
xapp
);
stdapp
=
std
(
xapp
);
% On centre et on réduit les 3 groupes
[
xappcr
,
xtestcr
]
=
normalizemeanstd
(
xapp
,
xtest
,
mapp
,
stdapp
);
[
~
,
xvalcr
]
=
normalizemeanstd
(
xapp
,
xVal
,
mapp
,
stdapp
);
[
~
,
kcr
]
=
min
(
erreursPrediction
(
xappcr
,
yapp
,
xvalcr
,
50
,
yVal
));
yValPredcr
=
kppv
(
xtestcr
,
xappcr
,
yapp
,
kcr
,[]);
errValFincr
=
mean
(
ytest
~=
yValPredcr
);
Semestre1/IML/TP/TP1/WhiteW.mat
0 → 100644
View file @
0882d90b
File added
Semestre1/IML/TP/TP1/erreursPrediction.m
0 → 100644
View file @
0882d90b
function [errVal] = erreursPrediction(xapp,yapp,x,n,y)
MatDist=[];
errVal=1:1:n;
for k=1:n
[yValPred,MatDist] = kppv(x,xapp,yapp,k,MatDist);
errVal(k)= mean(y ~= yValPred);
end
end
\ No newline at end of file
Semestre1/IML/TP/TP1/kppv.m
0 → 100644
View file @
0882d90b
function
[
YPeval
,
MatDist
]
=
kppv
(
Xeval
,
Xapp
,
Yapp
,
k
,
MatDist
)
% USAGE
% [YPeval,MatDist]=knn(Xeval, Xapp, Yapp, k, MatDist)
% Xeval : les donn�es dont on veut predire la classe. Xeval est une matrice
% de dimensions Ne x d (d: nombre de variables)
% Xapp : donn�es d'apprentissage (donn�es de r�f�rence), matrice Na x d
% Yapp : vect de taille Na contenant les labels des points dans Xapp
% MatDist : matrice de distance entre les points dans Xeval et ceux de
% Xapp. Matrice de dimensions Ne x Na. Si cette matrice n'existe pas il
% faut faire l'appel comme [YPeval,MatDist]=kppv(Xeval, Xapp, Yapp, k, [])
% YPeval : vecteur (taille Ne) des labels pr�dits pour les points de Xeval
% on d�termine combien de classes on a dans les donn�es
classcode
=
(
unique
(
Yapp
))
'
;
nbclasse
=
length
(
classcode
);
Ne
=
size
(
Xeval
,
1
);
Na
=
size
(
Xapp
,
1
);
YPeval
=
zeros
(
Ne
,
1
);
% on calcule la matrice des distances entre les points Xeval et Xapp si
% l'appel a �t� fait avec MatDist = [] (matrice vide) sinon on ne fait rien
if
nargin
<
5
||
isempty
(
MatDist
)
% on a deja calcule la matrice de distance
MatDist
=
zeros
(
Ne
,
Na
);
for
i
=
1
:
Ne
;
for
j
=
1
:
Na
;
MatDist
(
i
,
j
)
=
(
Xeval
(
i
,:)
-
Xapp
(
j
,:))
*
(
Xeval
(
i
,:)
-
Xapp
(
j
,:))
'
;
end
;
end
;
end
;
% Calcul de la pr�diction des labels des Ne points de Xeval par kppv
for
i
=
1
:
Ne
[
~
,
I
]
=
sort
(
MatDist
(
i
,:));
C
=
Yapp
(
I
);
classeppv
=
C
(
1
:
k
);
nc
=
0
*
ones
(
nbclasse
,
1
);
for
j
=
1
:
k
;
ind
=
find
(
classcode
==
classeppv
(
j
));
nc
(
ind
)
=
nc
(
ind
)
+
1
;
end
;
[
~
,
aff
]
=
max
(
nc
);
YPeval
(
i
)
=
classcode
(
aff
);
end
;
\ No newline at end of file
Semestre1/IML/TP/TP1/normalizemeanstd.m
0 → 100644
View file @
0882d90b
function
[
xapp
,
xtest
,
meanxapp
,
stdxapp
]
=
normalizemeanstd
(
xapp
,
xtest
,
meanx
,
stdx
)
% USAGE
%
% [xapp,xtest,meanxapp,stdxapp] = normalizemeanstd(xapp,xtest)
%
% normalize inputs and output mean and standard deviation to 0 and 1
%
%
tol
=
1e-5
;
nbsuppress
=
0
;
if
nargin
<
3
meanxapp
=
mean
(
xapp
);
stdxapp
=
std
(
xapp
);
else
meanxapp
=
meanx
;
stdxapp
=
stdx
;
end
;
nbxapp
=
size
(
xapp
,
1
);
indzero
=
find
(
abs
(
stdxapp
)
<
tol
);
%keyboard
if
~
isempty
(
indzero
)
stdxapp
(
indzero
)
=
1
;
end
;
nbvar
=
size
(
xapp
,
2
);
xapp
=
(
xapp
-
ones
(
nbxapp
,
1
)
*
meanxapp
)
.
/
(
ones
(
nbxapp
,
1
)
*
stdxapp
)
;
if
nargin
>
1
&
~
isempty
(
xtest
)
nbxtest
=
size
(
xtest
,
1
);
xtest
=
(
xtest
-
ones
(
nbxtest
,
1
)
*
meanxapp
)
.
/
(
ones
(
nbxtest
,
1
)
*
stdxapp
);
else
xtest
=
[];
end
;
\ No newline at end of file
Semestre1/IML/TP/TP1/splitdata.m
0 → 100644
View file @
0882d90b
function [xapp, yapp, xtest, ytest] = splitdata(x, y, ratio)
classcode = unique (y);
xapp = [];
yapp= [];
xtest = [];
ytest = [];
for numclass=1:length(classcode)
indclass = find(y==classcode(numclass));
Ni = length(indclass);
aux = randperm(Ni);
auxapp = aux(1: ceil(ratio*Ni));
auxtest = aux(ceil(ratio*Ni)+1:end);
xapp = [xapp; x(indclass(auxapp),:)];
yapp = [yapp; y(indclass(auxapp))];
xtest = [xtest; x(indclass(auxtest),:)];
ytest = [ytest; y(indclass(auxtest))];
end
Semestre1/IML/TP/TP1/test.adoc
0 → 100644
View file @
0882d90b
= Test
:nofooter:
:icons: font
== Machin
* Hello
** Test
... mar
... fjsjk
WARNING: test
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment