Znn3bq.jpeg
²é¿´: 1677  |  »Ø¸´: 1

biao511

Òø³æ (СÓÐÃûÆø)

[ÇóÖú] SOFNN ×Ô×é֯ģºýÉñ¾­ÍøÂçmatlab´úÂë ÒÑÓÐ1È˲ÎÓë

ÓÐһƪÎÄÕ½ÐTwitter mood predicts the stock market£¬ÎÄÖÐÓ¦ÓÃSOFNN·½·¨½øÐÐÁËѵÁ·ºÍÔ¤²â£¬ÄÄλÓÐÕâ·½ÃæµÄmatlab´úÂ룬¸ø¹²Ïíһϣ¬Ñ§Ï°Ñ§Ï°£¡
»Ø¸´´ËÂ¥

» ÊÕ¼±¾ÌûµÄÌÔÌûר¼­ÍƼö

¿ØÖÆ¿ÆÑ§Ó빤³Ì

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

dch1190

гæ (СÓÐÃûÆø)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

function [ c, sigma , W_output ] = SOFNN( X, d, Kd )
%SOFNN Self-Organizing Fuzzy Neural Networks
%Input Parameters
% X(r,n) - rth traning data from nth observation
% d(n) - the desired output of the network (must be a row vector)
% Kd(r) - predefined distance threshold for the rth input

%Output Parameters
% c(IndexInputVariable,IndexNeuron)
% sigma(IndexInputVariable,IndexNeuron)
% W_output is a vector

%Setting up Parameters for SOFNN
SigmaZero=4;
delta=0.12;
threshold=0.1354;
k_sigma=1.12;

%For more accurate results uncomment the following
%format long;

%Implementation of a SOFNN model
[size_R,size_N]=size(X);
%size_R - the number of input variables
c=[];
sigma=[];
W_output=[];
u=0; % the number of neurons in the structure
Q=[];
O=[];
Psi=[];
for n=1:size_N
    x=X(:,n);   
    if u==0 % No neuron in the structure?
        c=x;
        sigma=SigmaZero*ones(size_R,1);
        u=1;
        Psi=GetMePsi(X,c,sigma);
        [Q,O] = UpdateStructure(X,Psi,d);
        pT_n=GetMeGreatPsi(x,Psi(n,)';        
    else
        [Q,O,pT_n] = UpdateStructureRecursively(X,Psi,Q,O,d,n);
    end;

    KeepSpinning=true;
    while KeepSpinning
        %Calculate the error and if-part criteria
        ae=abs(d(n)-pT_n*O); %approximation error
        [phi,~]=GetMePhi(x,c,sigma);
        [maxphi,maxindex]=max(phi); % maxindex refers to the neuron's index

        if ae>delta
            if maxphi<threshold
                %enlarge width
                [minsigma,minindex]=min(sigma(:,maxindex));
                sigma(minindex,maxindex)=k_sigma*minsigma;
                Psi=GetMePsi(X,c,sigma);
                [Q,O] = UpdateStructure(X,Psi,d);
                pT_n=GetMeGreatPsi(x,Psi(n,)';                              
            else
                %Add a new neuron and update structure
                ctemp=[];
                sigmatemp=[];
                dist=0;
                for r=1:size_R
                    dist=abs(x(r)-c(r,1));
                    distIndex=1;
                    for j=2:u
                        if abs(x(r)-c(r,j))<dist
                            distIndex=j;
                            dist=abs(x(r)-c(r,j));
                        end;
                    end;
                    if dist<=Kd(r)
                        ctemp=[ctemp; c(r,distIndex)];
                        sigmatemp=[sigmatemp ; sigma(r,distIndex)];
                    else
                        ctemp=[ctemp; x(r)];
                        sigmatemp=[sigmatemp ; dist];
                    end;
                end;
                c=[c ctemp];
                sigma=[sigma sigmatemp];
                Psi=GetMePsi(X,c,sigma);
                [Q,O] = UpdateStructure(X,Psi,d);
                KeepSpinning=false;
                u=u+1;
            end;
        else
            if maxphi<threshold
                %enlarge width
                [minsigma,minindex]=min(sigma(:,maxindex));
                sigma(minindex,maxindex)=k_sigma*minsigma;
                Psi=GetMePsi(X,c,sigma);
                [Q,O] = UpdateStructure(X,Psi,d);
                pT_n=GetMeGreatPsi(x,Psi(n,)';               
            else
                %Do nothing and exit the while
                KeepSpinning=false;               
            end;
        end;        
    end;
end;
W_output=O;
end

function [Q_next, O_next,pT_n] = UpdateStructureRecursively(X,Psi,Q,O,d,n)
%O=O(t-1) O_next=O(t)
p_n=GetMeGreatPsi(X(:,n),Psi(n,);
pT_n=p_n';
ee=abs(d(n)-pT_n*O); %|e(t)|
temp=1+pT_n*Q*p_n;
ae=abs(ee/temp);

if ee>=ae
    L=Q*p_n*(temp)^(-1);
    Q_next=(eye(length(Q))-L*pT_n)*Q;
    O_next=O + L*ee;
else
    Q_next=eye(length(Q))*Q;
    O_next=O;
end;
end

function [ Q , O ] = UpdateStructure(X,Psi,d)
GreatPsiBig = GetMeGreatPsi(X,Psi);

%M=u*(r+1)
%n - the number of observations
[M,~]=size(GreatPsiBig);

%Others Ways of getting Q=[P^T(t)*P(t)]^-1
%**************************************************************************
%opts.SYM = true;
%Q = linsolve(GreatPsiBig*GreatPsiBig',eye(M),opts);
%
%Q = inv(GreatPsiBig*GreatPsiBig');
%Q = pinv(GreatPsiBig*GreatPsiBig');
%**************************************************************************
Y=GreatPsiBig\eye(M);
Q=GreatPsiBig'\Y;

O=Q*GreatPsiBig*d';
end


%This function works too with x
% (X=X and Psi is a Matrix) - Gets you the whole GreatPsi
% (X=x and Psi is the row related to x) - Gets you just the column related with the observation
function [GreatPsi] = GetMeGreatPsi(X,Psi)
%Psi - In a row you go through the neurons and in a column you go through number of
%observations **** Psi(#obs,IndexNeuron) ****
GreatPsi=[];
[N,U]=size(Psi);
for n=1:N
    x=X(:,n);
    GreatPsiCol=[];
    for u=1:U
        GreatPsiCol=[ GreatPsiCol ; Psi(n,u)*[1; x] ];
    end;
    GreatPsi=[GreatPsi GreatPsiCol];
end;
end


function [phi, SumPhi]=GetMePhi(x,c,sigma)
[r,u]=size(c);
%u - the number of neurons in the structure
%r - the number of input variables

phi=[];
SumPhi=0;

for j=1:u % moving through the neurons
    S=0;
    for i=1:r % moving through the input variables
        S = S + ((x(i) - c(i,j))^2) / (2*sigma(i,j)^2);
    end;   
    phi = [phi exp(-S)];        
    SumPhi = SumPhi + phi(j);   %phi(u)=exp(-S)
end;
end


%This function works too with x, it will give you the row related to x
function [Psi] = GetMePsi(X,c,sigma)
[~,u]=size(c);
[~,size_N]=size(X);
%u - the number of neurons in the structure
%size_N - the number of observations
Psi=[];
for n=1:size_N        
    [phi, SumPhi]=GetMePhi(X(:,n),c,sigma);   
    PsiTemp=[];
    for j=1:u
        %PsiTemp is a row vector ex: [1 2 3]
        PsiTemp(j)=phi(j)/SumPhi;
    end;

    Psi=[Psi; PsiTemp];   
    %Psi - In a row you go through the neurons and in a column you go through number of
    %observations **** Psi(#obs,IndexNeuron) ****
end;

end
2Â¥2017-05-21 15:48:08
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ biao511 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] Ò»Ö¾Ô¸¹þ¹¤´ó 085600 277 12²Ä¿Æ»ùÇóµ÷¼Á 5+5 chenny174 2026-04-10 32/1600 2026-04-12 23:56 by BruceLiu320
[¿¼ÑÐ] 290Çóµ÷¼Á +14 ¿Â»´È» 2026-04-12 16/800 2026-04-12 19:22 by dan_wang
[¿¼ÑÐ] 327Çóµ÷¼Á +5 ʰ¹âÈÎȾ 2026-04-06 5/250 2026-04-12 02:29 by Çï¶¹²ËÑ¿
[ÕÒ¹¤×÷] ɽ¶«¸ßУ½Ìʦ¿¼ºË³¬¼¶ÎÞµ×Ïߣ¬Ô±¹¤¹ý²»ÏÂÈ¥À² +4 qut2026 2026-04-09 9/450 2026-04-12 00:54 by qut2026
[¿¼ÑÐ] 280Çóµ÷¼Á +13 wzzzÍõ 2026-04-09 13/650 2026-04-12 00:31 by ÓÂÅʸ߷å0126
[¿¼ÑÐ] ҩѧ305Çóµ÷¼Á +8 Â꿨°Í¿¨boom 2026-04-10 8/400 2026-04-12 00:07 by zhouwenxian
[¿¼ÑÐ] 0854µ÷¼Á +8 ³¤¹­°Á 2026-04-11 9/450 2026-04-11 21:44 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 291·Öµ÷¼Á +5 Éϰ¶Ð¡Ó¨¼ÓÓÍ 2026-04-09 6/300 2026-04-11 21:06 by ÄæË®³Ë·ç
[¿¼ÑÐ] ũѧ0904 312Çóµ÷¼Á +3 Say Never 2026-04-11 3/150 2026-04-11 17:22 by daydayup2005
[¿¼ÑÐ] 085402ͨÐŹ¤³Ìµ÷¼Á£¬ÓÐ4Ïîѧ¿Æ¾ºÈü¹ú½±£¨µçÈü¹ú¶þ£©£¬Ë¶Ê¿Ñо¿Éúµ÷¼Á×Ô¼öÐÅ¡£ +5 mÓÀo²»vÑÔoÆúm 2026-04-09 5/250 2026-04-11 09:33 by zhq0425
[¿¼ÑÐ] 291 Çóµ÷¼Á +29 »¯¹¤2026½ì±ÏÒµÉ 2026-04-09 29/1450 2026-04-10 22:55 by dick_runner
[¿¼ÑÐ] 070300»¯Ñ§ Çóµ÷¼Á +13 73372112 2026-04-08 13/650 2026-04-09 20:22 by maddjdld
[¿¼ÑÐ] µ÷¼Á +19 2261744733 2026-04-08 19/950 2026-04-09 19:11 by vgtyfty
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖпÆÔº105500רҵ×Ü·Ö315Çóµ÷¼Á +6 lallalh 2026-04-09 7/350 2026-04-09 17:51 by lallalh
[¿¼ÑÐ] ¸´ÊÔµ÷¼Á£¬Ò»Ö¾Ô¸Ö£ÖÝ´óѧ²ÄÁÏÓ뻯¹¤289·Ö +31 ˶ÐǸ° 2026-04-08 31/1550 2026-04-09 16:54 by Delta2012
[¿¼ÑÐ] 086000ÉúÎïÓëÒ½Ò©µ÷¼Á +7 awwwwwooooo 2026-04-09 7/350 2026-04-09 13:31 by ±±¼«159263
[¿¼ÑÐ] 266µ÷¼Á +8 daya sun 2026-04-07 9/450 2026-04-08 20:27 by yutian743
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ª´ó»¯Ñ§327Çóµ÷¼Á +12 ÍõÍõ°×ʯ 2026-04-06 13/650 2026-04-08 16:05 by luoyongfeng
[¿¼ÑÐ] 11408 325·Ö +3 jgtxuxgkx 2026-04-07 3/150 2026-04-07 23:10 by lbsjt
[¿¼ÑÐ] Èí¹¤Ñ§Ë¶299Çóµ÷¼Á +6 useryy 2026-04-07 6/300 2026-04-07 09:50 by vgtyfty
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û