0% ont trouvé ce document utile (0 vote)
220 vues9 pages

TP Final Acp

Ce document décrit une analyse en composantes principales de données spectrales de proche infrarouge de cinq types de fruits. Il présente le code MATLAB pour charger les données, les prétraiter, effectuer l'ACP et visualiser les résultats.

Transféré par

Yassine EL Dahmi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
220 vues9 pages

TP Final Acp

Ce document décrit une analyse en composantes principales de données spectrales de proche infrarouge de cinq types de fruits. Il présente le code MATLAB pour charger les données, les prétraiter, effectuer l'ACP et visualiser les résultats.

Transféré par

Yassine EL Dahmi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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