📄 train_kpca_denois.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>train_kpca_denois.m</title><link rel="stylesheet" type="text/css" href="../../../m-syntax.css"></head><body><code><span class=h1>% TRAIN_KPCA_DENOIS Training of kernel PCA model for image denoising. </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% The kernel PCA model is trained to describe an input</span><br><span class=help>% class of images corrupted by noise [Mika99b]. The training </span><br><span class=help>% data contains images corrupted by noise and corresponding </span><br><span class=help>% ground truth. The free paramaters of the kernel PCA</span><br><span class=help>% are tuned by cross-validation. The objective function </span><br><span class=help>% is a sum of squared differences between ground truth </span><br><span class=help>% images and reconstructed images. The greedy KPCA algorithm </span><br><span class=help>% is used to train the kernel PCA model.</span><br><span class=help>%</span><br><span class=help>% See also</span><br><span class=help>% GREEDYKPCA, KPCAREC, KPCA.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 07-jun-2004, VF</span><br><span class=help1>% 06-jun-2004, VF</span><br><span class=help1>% 17-mar-2004, VF</span><br><br><hr><span class=comment>% Setting</span><br><span class=comment>% -------------------------------------</span><br><br>options.ker = <span class=quotes>'rbf'</span>; <span class=comment>% kernel</span><br>options.m = 500; <span class=comment>% # of basis vectors</span><br>options.p = 10; <span class=comment>% deth of search for the best basis vector</span><br>options.verb = 1;<br><br><span class=comment>% # folds for cross-validation; </span><br><span class=comment>% num_folds = 1 means 50/50 - training/testing part</span><br>num_folds = 1; <br><br><span class=comment>% algorithm to compute kernel PCA</span><br><span class=comment>%KPCA_Algo = 'kpca';</span><br>KPCA_Algo = <span class=quotes>'greedykpca'</span>;<br><br><span class=comment>% parameters to be evaluated by cross-validation:</span><br><span class=comment>%New_Dim_Range = [50 100 200 300]; % usps</span><br><span class=comment>%Arg_Range = [3.5 4 5 6 7 8]; % usps</span><br><br>New_Dim_Range = [1 2]; <span class=comment>% noisy_circle</span><br>Arg_Range = [0.5 1 2 3]; <span class=comment>% noisy_circle</span><br><br><span class=comment>% input/output files</span><br>input_data_file = <span class=quotes>'noisy_circle'</span>;<br>output_data_file = [];<br><span class=comment>%input_data_file = '/home.dokt/xfrancv/data/usps/usps_noisy';</span><br><span class=comment>%output_data_file = 'USPSModelGreedyKPCA';</span><br><br><span class=comment>% Loads training and testing data.</span><br><span class=comment>% -------------------------------------</span><br>load(input_data_file,<span class=quotes>'trn'</span>,<span class=quotes>'tst'</span>);<br>[dim,num_data] = size(trn.X);<br><br><span class=comment>% Data partitioning for cross-validation</span><br>[itrn,itst] = crossval(num_data,num_folds);<br><br><span class=comment>% Tuning kernel PCA model</span><br><span class=comment>% -------------------------------------</span><br>Mse = [];<br><br><span class=keyword>for</span> arg = Arg_Range,<br> <span class=keyword>for</span> new_dim = New_Dim_Range,<br> <br> <span class=io>fprintf</span>(<span class=quotes>'\nnew_dim = %d, arg = %f\n'</span>, new_dim, arg);<br> <br> cv_mse = 0; <br> <span class=keyword>for</span> i=1:num_folds,<br> <br> <span class=io>fprintf</span>(<span class=quotes>'\n'</span>);<br><br> <span class=comment>% training and validation part of data</span><br> trn_X = trn.gnd_X(:,itrn{i});<br> val_gnd_X = trn.gnd_X(:,itst{i});<br> val_corr_X = trn.X(:,itst{i});<br> <br> <span class=io>fprintf</span>(<span class=quotes>'Computing Kernel PCA...'</span>);<br> options.arg = arg;<br> options.new_dim = new_dim;<br> kpca_model = <span class=eval>feval</span>( KPCA_Algo, trn_X, options);<br> <span class=io>fprintf</span>(<span class=quotes>'done.\n'</span>);<br><br> <span class=comment>% data restoration</span><br> val_reconst_X = kpcarec(val_corr_X, kpca_model);<br> <br> <span class=comment>% compute error</span><br> dummy = (val_reconst_X - val_gnd_X).^2;<br> mse = sum(dummy(:))/size(val_gnd_X,2);<br> <br> <span class=io>fprintf</span>(<span class=quotes>'folder %d/%d: validation errors mse=%f\n'</span>, ...<br> i, num_folds, mse);<br> <br> cv_mse = cv_mse + mse;<br> <span class=keyword>end</span><br><br> <span class=comment>% compute cross-validation error</span><br> cv_mse = cv_mse/num_folds;<br> <br> Mse(find(new_dim==New_Dim_Range),find(arg==Arg_Range)) = cv_mse;<br> <br> <span class=io>fprintf</span>(<span class=quotes>'Kernel arg = %f: mse = %f\n'</span>, arg, cv_mse);<br> <span class=keyword>end</span><br><span class=keyword>end</span><br><br><span class=comment>% take the best parameters</span><br><span class=comment>%----------------------------------------------</span><br>[inx1,inx2] = find(Mse==min(Mse(:)));<br><span class=io>fprintf</span>(<span class=quotes>'\nMin(mse) = %f, dim = %f, arg = %f\n'</span>, ...<br> Mse(inx1,inx2), New_Dim_Range(inx1), Arg_Range(inx2) );<br><br><span class=comment>% compute kernel PCA model with best parameters</span><br><span class=comment>% using all training data</span><br><span class=comment>%---------------------------------------------</span><br><span class=io>fprintf</span>(<span class=quotes>'Computing optimal Kernel PCA...'</span>);<br>options.arg = Arg_Range(inx2);<br>options.new_dim = New_Dim_Range(inx1);<br>kpca_model = <span class=eval>feval</span>( KPCA_Algo, trn.X, options);<br><span class=io>fprintf</span>(<span class=quotes>'done.\n'</span>);<br><br><span class=keyword>if</span> isempty(output_data_file),<br> <span class=comment>% plot results of tuning</span><br> <span class=graph>figure</span>; hold on;<br> xlabel(<span class=quotes>'\sigma'</span>); ylabel(<span class=quotes>'mse'</span>);<br><br> h = [];<br> clear Str;<br> <span class=keyword>for</span> i=1:length(New_Dim_Range),<br> h = [h, <span class=graph>plot</span>(Arg_Range, Mse(i,:),marker_color(i) )];<br> Str{i} = <span class=io>sprintf</span>(<span class=quotes>'dim = %d'</span>, New_Dim_Range(i));<br> <span class=keyword>end</span><br><br> legend(h,Str);<br><span class=keyword>else</span><br> <span class=comment>% save model to file</span><br> save(output_data_file,<span class=quotes>'Arg_Range'</span>,<span class=quotes>'New_Dim_Range'</span>,...<br> <span class=quotes>'options'</span>,<span class=quotes>'Mse'</span>,<span class=quotes>'num_folds'</span>,<span class=quotes>'input_data_file'</span>,...<br> <span class=quotes>'output_data_file'</span>,<span class=quotes>'KPCA_Algo'</span>,<span class=quotes>'kpca_model'</span>);<br><span class=keyword>end</span><br><br><span class=comment>% plot denosing in 2D case only</span><br><span class=comment>%-------------------------------------</span><br><span class=keyword>if</span> dim == 2 & isempty(output_data_file),<br><br> X = kpcarec(tst.X,kpca_model);<br><br> mse = sum(sum((X-tst.gnd_X).^2 ));<br> <span class=io>fprintf</span>(<span class=quotes>'\ntest mse=%f\n'</span>, mse);<br><br> <span class=graph>figure</span>; hold on;<br> h0=ppatterns(tst.gnd_X,<span class=quotes>'r+'</span>);<br> h1=ppatterns(tst.X,<span class=quotes>'gx'</span>);<br> h2=ppatterns(X,<span class=quotes>'bo'</span>);<br> legend([h0 h1 h2],<span class=quotes>'Ground truth'</span>,<span class=quotes>'Noisy'</span>,<span class=quotes>'Reconst'</span>);<br><span class=keyword>end</span><br><br><span class=comment>% EOF</span><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -