Bonjour,

Je débute sous Matlab et dans le cadre d'un projet je modélise une variable X par un réseau de neurones type RBF.

Pour se faire j'ai procédé comme suit:

Identification des paramètres en 3 parties:

1° identification des centres et largeurs des fonctions d'activation des neurones (centres placés dans l'espace des données de façon à couvrir tout l'espace des données) -> utilisation d'une procédure de clustering (k-means)

2° identification linéaire des poids et biais par un algorithme supervisé: FMINSEARCH ou HYBRIDE (Genetic Algorithm + Fminsearch)

3° identification non linéaire des poids, biais et conditions initiales grâce à la simulation du modèle hybride complet avec utilisation d'un maximum de vraisemblance.

Pour la 1ère partie c'est bon j'ai utilisé la fonction kmean implémentée dans Matlab pour identifier les centres puis j'ai implémenté une fonction (width ou L) pour calculer les largeurs ou radii.

C'est dans la 2ème phase que je bloque:

fonction de base:

y = w exp(-((xi - c)^2)/L^2) +b (w = poids et b = biais)

Linéarisation: Y = phi_lin*thêta avec thêta = [w1...wk b] et phi_lin = exp(...))

Via kmean et width, j'ai les c et les L donc je peux calculer phi_lin (voir code). J'obtiens une certaine matrice de dimension m*k (k étant le nombre de cluster).

Ensuite je cherche à calculer mon vecteur thêta et pour cela j'écris ma fonction de coût à minimiser (lin_id_F) , je fixe mes options pour fmeansearch et logiquement je devrais obtenir mon vecteur thêta optimisé.

Ben 1er problème, j'ai un problème avec les valeurs internes des dimensions de mes matrices, ce qui a pour effet de me donner un truc bizarre quand je fait tourner lin_id_F. Malheureusement avec ça je ne sais pas avancer dans la suite de mon projet.

Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
%% Identification Linéaire:  %--------------------------------------------------------------------------------------%  
% Y = phi*thêta avec Y mesuré, 
%                    phi mesuré, 
%                    thêta inconnu 
%--------------------------------------------------------------------------------------% 
% Y = Kphi_mes où K phi = dxi_dt - D xi + F - Q 
% %      avec xi mesuré et dxi_dt obtenu par interpolation, lissage et dérivée 
% %      du signal xi % % % % theta(:,i)=[w(i,1) w(i,2)... bi] 
% % 
% % phi=[exp(|u1-c1|^2/r1) exp(|u1-c2|^2/r2) ... 1;...;exp(|un-c1|^2/r1) exp(|un-c2|^2/r2) ... 1]     
 
%% Calcul de la distance entre deux points: C1 et C2   
 
%Rem: C1 is a 1xm vector 
%     C2 is a 1xm vector 
% nom de ma fonction : dist = distance(C1,C2)   
 
dist=zeros(size(C1,1),1); 
for i=1:size(C1,2)     
	dist=dist+(C1(:,i)-C2(:,i)).^2; 
end 
dist=sqrt(dist);   
 
for ii=1:size(data_part,1) % pour tous les échantillons de toutes les expériences     
	for jj=1:nhl % boucle sur les neurones         
		%data_part((ii,:),(jj,:))         
		dist_2=(distance(data_part(ii,:),C(jj,:))).^2;% distance euclidienne         
		phi_lin(ii,jj)=exp(-dist_2/(L(jj,1).^2));     
	end     
	phi_lin(ii,nhl+1)=1; 
end   
 
%% Fonction de coût à minimiser pour l'identification linéaire: 
%-------------------------------------------------------------------------% 
%  
% nom de ma function = lin_id_F   
 
for i = 1:size(data_part,1)     
	for j = 1:nhl+1                  
		lin_id_fnc = ((phi_lin(i,j)*(phi_lin(i,j)')^-1)*(phi_lin(i,j)*data_part(i,j)));     
	end 
end   
 
%% Global Optimization using Fminsearch function:   
options = optimset('Display','iter','MaxIter',2000,'MaxFunEvals',6000,'LargeScale','off','TolFun',1e-10,'TolX',1e-10);   
for i=1:sorties     
	[tetha(:,1), fval] = fminsearch(lin_id_F, options); 
end   
 
save (['k' num2str(nhl) '_cluster_245_pos'] ,'C','width' ,'theta')
Toute aide est la bienvenue. D'avance merci et n'hésitez pas à me poser des questions si je ne suis pas claire.