?? greedyappx.html
字號(hào):
<br> <span class=keyword>if</span> i > 1,<br> Z(i,work_inx) = ...<br> (tmp - Z(1:i-1,new_inx)'*Z(1:i-1,work_inx))/sqrt(Errors(new_inx));<br><br> Alpha(i,:) = - Z(1:i-1,new_inx)'*Alpha(1:i-1,:);<br> Alpha(i,i) = 1;<br> Alpha(i,:) = Alpha(i,:)/sqrt(Errors(new_inx));<br> <span class=keyword>else</span><br> Z(1,:) = tmp/sqrt(Errors(new_inx));<br> Alpha(1,1) = 1/sqrt(Errors(new_inx));<br> <span class=keyword>end</span><br><br><span class=comment>% SV(:,i) = x;</span><br> <span class=comment>% Error(i) = k(i,i)-k'(i,i)</span><br> Errors(work_inx) = Errors(work_inx) - Z(i,work_inx).^2;<br> Errors(find(Errors<0)) = 0;<br><span class=comment>% Errors(sel_inx)=zeros(1,length(sel_inx));</span><br> work_inx(find(work_inx==new_inx)) = [];<br> <br> <span class=comment>% store errors</span><br> MsErr = [MsErr, sum(Errors)/num_data];<br> MaxErr = [MaxErr, max(Errors)];<br> <br> <span class=keyword>if</span> verb,<br> <span class=io>fprintf</span>(<span class=quotes>'%d: maxerr=%f, mserr=%f, inx=%d\n'</span>, ...<br> i,MaxErr(<span class=keyword>end</span>), MsErr(<span class=keyword>end</span>), new_inx);<br> <span class=keyword>end</span><br> <br> <span class=comment>% evaluate stopping conditions:</span><br> <span class=keyword>if</span> maxerr >= MaxErr(<span class=keyword>end</span>) | mserr >= MsErr(<span class=keyword>end</span>),<br> <span class=jump>break</span>;<br> <span class=keyword>end</span><br><span class=keyword>end</span><br><br><span class=comment>%if MsErr(end) < 0, </span><br><span class=comment>% i = i-1</span><br><span class=comment>% MaxErr = MaxErr(1:end-1);</span><br><span class=comment>% MsErr = MsErr(1:end-1);</span><br><span class=comment>% sel_inx = sel_inx(1:end-1);</span><br><span class=comment>%end % Patch to avaid nummerical errors</span><br><br><span class=comment>% cut off non-used memory if number of used base vector is less than m</span><br>Alpha=Alpha(1:i,1:i);<br>Z = Z(1:i,:);<br><br><span class=jump>return</span>;<br><br><br><span class=comment>%=================================================</span><br><span class=defun_kw>function</span> <span class=defun_out>[sel_inx,Alpha,Z,kercnt,MsErr,MaxErr]</span>=...<br> ordinary_greedyappx(X,ker,arg,m,mserr,maxerr,verb,init_model) <br><br>[dim,num_data]=size(X);<br><br>kercnt=0;<br>sel_inx=[]; <span class=comment>% indices of seleted base vectors</span><br>work_inx = [1:num_data]; <span class=comment>% indices of the rest </span><br>MsErr = [];<br>MaxErr = [];<br><br><span class=keyword>if</span> <span class=stack>nargin</span> < 8,<br> Errors = diagker(X,ker,arg)';<br> Z = zeros(m,num_data);<br> Alpha=zeros(m,m);<br> curr_m = 0;<br><span class=keyword>else</span><br> Errors = init_model.Errors;<br> curr_m = size(init_model.Z,1);<br> m = m + curr_m;<br> Z = zeros(m,num_data);<br> Alpha=zeros(m,m);<br><br> Z(1:curr_m,:) = init_model.Z;<br> Alpha(1:curr_m,1:curr_m) = init_model.Alpha;<br><span class=keyword>end</span><br><br><span class=keyword>if</span> verb, <span class=io>fprintf</span>(<span class=quotes>'('</span>); <span class=keyword>end</span><br><br><span class=keyword>for</span> i=curr_m+1:m,<br> <br> <span class=comment>% find vector with highest reconstruction error</span><br> [curr_maxerr,new_inx] = max( Errors );<br> sel_inx = [sel_inx,new_inx];<br><br> <span class=comment>% orthonormalization</span><br> tmp = kernel( X(:,new_inx), X(:,work_inx), ker, arg ); <br> kercnt = kercnt + num_data - i;<br><br> <span class=keyword>if</span> i > 1,<br> Z(i,work_inx) = ...<br> (tmp - Z(1:i-1,new_inx)'*Z(1:i-1,work_inx))/sqrt(Errors(new_inx)); <br><br> Alpha(i,:) = - Z(1:i-1,new_inx)'*Alpha(1:i-1,:);<br> Alpha(i,i) = 1;<br> Alpha(i,:) = Alpha(i,:)/sqrt(Errors(new_inx));<br> <span class=keyword>else</span><br> Z(1,:) = tmp/sqrt(Errors(new_inx));<br> Alpha(1,1) = 1/sqrt(Errors(new_inx));<br> <span class=keyword>end</span><br><br> <span class=comment>% Error(i) = k(i,i)-k'(i,i)</span><br> Errors(work_inx) = Errors(work_inx) - Z(i,work_inx).^2; <br><span class=comment>% Errors(sel_inx)=zeros(1,length(sel_inx));</span><br> work_inx(find(work_inx==new_inx)) = [];<br> <br> <span class=comment>% store errors</span><br> MsErr = [MsErr, sum(Errors)/num_data];<br> MaxErr = [MaxErr, max(Errors)];<br> <br> <span class=keyword>if</span> verb,<br> <span class=io>fprintf</span>(<span class=quotes>'.'</span>, i, MsErr(<span class=keyword>end</span>) );<br> <span class=keyword>end</span><br> <br> <span class=comment>% evaluate stopping conditions:</span><br> <span class=keyword>if</span> maxerr >= MaxErr(<span class=keyword>end</span>) | mserr >= MsErr(<span class=keyword>end</span>),<br> <span class=jump>break</span>;<br> <span class=keyword>end</span><br><span class=keyword>end</span><br><br><span class=keyword>if</span> verb, <span class=io>fprintf</span>(<span class=quotes>')\n'</span>); <span class=keyword>end</span><br><br><span class=comment>% cut off non-used memory if number of used base vector is less than m</span><br>Alpha=Alpha(1:i,1:i);<br>Z = Z(1:i,:);<br><br><span class=jump>return</span>;<br></code>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -