Vous êtes sur la page 1sur 9

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

Vous aimerez peut-être aussi