ANALYSE EN COMPOSANTES
PRINCIPALES
Travaux Pratiques
Réalisé par :
DAHMI YASSINE
Encadré par :
Pr. RABIE REDA
Master sciences et techniques
CAC : Agiq
Objectif :
I. Manipulation des données spectrales de proche infrarouge ;
II. Programmer un script sous matlab dédié au traitement et interpréter des données spectrales ;
III. Programmer un script consacré à l’analyse sur composante principale.
A) Manipulation des données spectrales :
1-charger le fichier.
Le script :
df=xlsread('TP_fruit(1).xlsx')
x=df(2:287,4:688)
Y=df(1,4:688)
2-afficher le graphe des spectres.
Le script :
figure('Name','Graphe de 287 spectres de NIR des cinq types de fruit');
plot(Y',x');
Le plot :
3- Afficher uniquement les spectres de 120 à 180.
Le script :
figure(11);plot(Y',x(120:180,:)')
Le plot :
4- Calculer le spectre moyen et son écart-type.
Le script :
spectremoyenne=mean(x);
sdspectre=std(x);
5 et 6 – Afficher le spectre moyen avec écart-type.
Le script :
spectremoyenneplusSD=spectremoyenne+sdspectre;
spectremoyennemoinsSD=spectremoyenne-sdspectre;
figure(12);plot(Y',spectremoyenne',Y',spectremoyenneplusSD',Y',spectremoyen
nemoinsSD')
Le plot :
7- Déterminer la hauteur maximale du signal.
hauteurmaximal=max(x(:));
8- Calculer le rapport signal / Bruit.
B) Prétraitement des spectres :
9- programmer un script dédié au prétraitement des données avec SVN et MSC.
##SVN
Le script :
function [xsnv]=snv(x)
[m,n]=size(x);
xsnv=((x-mean(x')'*ones(1,n))./(std(x')'*ones(1,n)))
figure(5);plot(xsnv')
figure(6);plot(mean(xsnv)',xsnv)
end
Le plot :
##MSC
function [xmsc,me,p]=msc1(x)
first=1;
last=length(x(1,:));
[m,n]= size(x);
me=mean(x);
for i=1:m
p=polyfit(me(first:last),x(i,first:last),1)
xmsc(i,:)=(x(i,:)-p(2)*ones(1,n))./(p(1)*ones(1,n));
end
figure(3);plot(xmsc')
figure(4);plot(mean(xmsc)',xmsc')
imagesc(corr(x))
colormap(jet)
end
Le plot :
## Réduction de la non-normalité
Le script :
function [logpr]=logp(x)
b=1./x
logpr=log(b)
figure(7);plot(logpr')
figure(8);plot(mean(logpr)',logpr');
Le plot :
C) Analyse en composante principale:
10- Appliquer une analyse en composante principale.
Le script :
function [Score,Loading,E,vr,moy,SD]=acp(X,Center,Scale)
%centrer les données
moy=mean(X);
SD=std(X);
if Center == true
%centrer les données
[n,a]=size(X);
moy=mean(X);
Xmoy=moy(ones(n,1),:);
Xc=X-Xmoy;
MAT=Xc;
elseif Scale== true
[n,a]=size(X);
moy=mean(X);
Xmoy=moy(ones(n,1),:);
Xc=X-Xmoy;
SD=std(X);
Xsd=SD(ones(n,1),:);
Xcr= Xc./Xsd;
MAT= Xcr;
else
MAT=X;
end
% SVD decomposition
[V h U]=svd(MAT);
% rsultats
Score =V*h;%Matrice des scores
Loading = U;% Les loadings
P=U;% Vecteur vecteur propre
E=MAT-((V*h)*U');% Matrice de Resud des résidus
vr=diag(h);
%%%Plot 2D des scores:3CP
figure('Name','Projection des scores dans deux dimension: Deux CP');
scatter(score(:,1),score(:,2))
x1=score(:,1);
y1=score(:,2);
z=score(:,3)
cl=L(2:287,3);
figure('Name','Projection des scores dans deux dimension: Deux CP en
attribuant à chaque spectre son origine/type');
plot(x1(cl==1),y1(cl==1),'.','markersize',20,'color','green');
hold on
xlabel('composante 1');ylabel('composante 2');
plot(x1(cl==2),y1(cl==2),'.','markersize',20,'color','red');
plot(x1(cl==3),y1(cl==3),'.','markersize',20,'color','black');
plot(x1(cl==4),y1(cl==4),'.','markersize',20,'color','yellow');
plot(x1(cl==5),y1(cl==5),'.','markersize',20,'color','blue');
hold off
%%%Plot 3D des scores:3CP
figure('Name','Projection des scores dans trois dimension: trois CP en
attribuant à chaque groupe son réference')
plot3(x1(cl==1),y1(cl==1),z(cl==1),'.','markersize',20,'color','green');
hold on
xlabel('composante 1');ylabel('composante 2');zlabel('composante 3');
plot3(x1(cl==2),y1(cl==2),z(cl==2),'.','markersize',20,'color','red');
plot3(x1(cl==3),y1(cl==3),z(cl==3),'.','markersize',20,'color','black');
plot3(x1(cl==4),y1(cl==4),z(cl==4),'.','markersize',20,'color','yellow');
plot3(x1(cl==5),y1(cl==5),z(cl==5),'.','markersize',20,'color','blue');
hold off
%% Ploter le graphe des loading avec 2 CP
figure('Name','Projection des loading dans deux dimension: Deux CP en
attribuant à chaque loading son origine/type');
biplot(loading(:,1:2),'scores',score(:,1:2))
%% Ploter le graphe des loading avec et 3CP
figure('Name','Projection des loading dans trois dimension: Trois CP en
attribuant à chaque loading son origine/type');
biplot(loading(:,1:3),'scores',score(:,1:3))
end