📄 inv_li.m
字号:
function [SSE,par,bias]=inv_li(inputs,centers,bases,output)%INV_LI Inversion on the consequents for linear output models%% [SSE,par,bias]=inv_li(inputs,centers,bases,output)%% SSE[1,1] Sum of the squeared errors% par[no_rules,no_var+1] Parameters of the consequents% bias[1,1] Shifts up or down all the% consequents %% inputs[no_data,no_var]% centers[no_rules,no_var]% bases[no_rules,no_var]% output[no_data,1]%% The following global variable are required: % memb_fun: 'gaussian'/'triangular' % arch: 'weigthed'/'comb' % format_out: 'linear'/'constant' % model_bias: 'bias'/'no_bias'%_______________________________________________________9 April 1996____global memb_fun;global arch;global format_out;global model_bias;[no_data,no_var]=size(inputs);[no_rules,no_var]=size(centers);no_par=no_var+1;w=ones(no_data,no_rules); %Matrix of the degree of match of each %datum to the premise of each ruleSum_w=zeros(no_data,1);for i=1:no_rules for j=1:no_var if strcmp(memb_fun,'gaussian') match=exp(-((inputs(:,j)-centers(i,j)).^2)/bases(i,j)); end if strcmp(memb_fun,'triangular') match=max(0,ones(no_data,1)-2*abs(inputs(:,j)-centers(i,j))/bases(i,j)); end w(:,i)=w(:,i).*match; end Sum_w=Sum_w + w(:,i);endSum_w=Sum_w+(Sum_w==0);X=zeros(no_data,no_par*no_rules);if strcmp(arch,'comb') in_ext=[inputs,ones(size(inputs,1),1)]; for i=1:no_rules for j=1:no_par X(:,(i-1)*no_par+j)=w(:,i).*in_ext(:,j); end endendif strcmp(arch,'weigthed') in_ext=[inputs,ones(size(inputs,1),1)]; for i=1:no_rules for j=1:no_par X(:,(i-1)*no_par+j)=(w(:,i)./Sum_w).*in_ext(:,j); end endendif strcmp(model_bias,'bias') A=[X,ones(no_data,1)]; tol=1e-9; P_and_bias=pinv(A,tol)*output; P=P_and_bias(1:no_par*no_rules,:); bias=P_and_bias(no_par*no_rules+1,:);endif strcmp(model_bias,'no_bias') A=X; tol=1e-9; P=pinv(A,tol)*output; bias=0;endSSE=sumsqr(output-X*P-bias);par=(reshape(P,no_par,no_rules))';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -