2015-06-20 160 views
0

我有一个非常简单的问题,但我也没弄明白怎么解决this.I拥有以下功能定义:将参数传递给Matlab的功能

function model = oasis(data, class_labels, parms) 
% model = oasis(data, class_labels, parms) 
% 
% Code version 1.3 May 2011 Fixed random seed setting 
% Code version 1.2 May 2011 added call to oasis_m.m 
% Code version 1.1 May 2011 handle gaps in class_labels 
% 
% Input: 
% -- data   - Nxd sparse matrix (each instance being a ROW) 
% -- class_labels - label of each data point (Nx1 integer vector) 
% -- parms (do sym, do_psd, aggress etc.) 
% 
% Output: 
% -- model.W - dxd matrix 
% -- model.loss_steps - a binary vector: was there an update at 
%   each iterations 
% -- modeo.parms, the actual parameters used in the run (inc. defaults) 
% 
% Parameters: 
% -- aggress: The cutoff point on the size of the correction 
%   (default 0.1) 
% -- rseed: The random seed for data point selection 
%   (default 1) 
% -- do_sym: Whether to symmetrize the matrix every k steps 
%   (default 0) 
% -- do_psd: Whether to PSD the matrix every k steps, including 
%   symmetrizing them (defalut 0) 
% -- do_save: Whether to save the intermediate matrices. Note that 
%   saving is before symmetrizing and/or PSD in case they exist 
%   (default 0) 
% -- save_path: In case do_save==1 a filename is needed, the 
%   format is save_path/part_k.mat 
% -- num_steps - Number of total steps the algorithm will 
%   run (default 1M steps) 
% -- save_every: Number of steps between each save point 
%   (default num_steps/10) 
% -- sym_every: An integer multiple of "save_every", 
%   indicates the frequency of symmetrizing in case do_sym=1. The 
%   end step will also be symmetrized. (default 1) 
% -- psd_every: An integer multiple of "save_every", 
%   indicates the frequency of projecting on PSD cone in case 
%   do_psd=1. The end step will also be PSD. (default 1) 
% -- use_matlab: Use oasis_m.m instead of oasis_c.c 
%  This is provided in the case of compilation problems. 
% 

我想要使用此功能,但我不知道如何设置参数,或使用默认值。在这种情况下,什么是可变参数,它是一个保持所有其他变量的对象?我可以做一些像语法的东西,我们把参数的名字加上值吗?例如:

model = oasis(data_example, labels_example, agress = 0.2) 

另外,如果我理解正确的,我得到两个对象的输出,这是模型和Modeo公司,所以我需要拨打这个电话来接收所有内容,该函数返回?

[model,modeo] = oasis(data_example, labels_example, ?(parms)?) 

回答

0

从上面的文档中,我不知道哪一个是正确的,但在matlab中有两种常用的可选参数。

参数值对:​​

model = oasis(data, class_labels, 'do_sym',1,'do_psd',0) 

结构:

params.do_sym=1 
params.do_psd=0 
model = oasis(data, class_labels, params) 

也许这两种可能性中的一个是正确的。

+0

我解决了用参数创建结构的问题。对于输出结果,Tamás评论说文本中有一个错字 – Mike

1

从你的函数定义看来,params只是参数的占位符。典型地,参数本身被传递作为形式对输入:

model = oasis(data, class_labels, 'do_sym',do_symValue, 'do_psd', do_psdValue,...)

其中do_symValuedo_psdValue和是要传递作为各参数的值。

至于函数返回值,返回单个struct,其成员为W,loss_stepsparms。我相信你认为第二个输出(modelo)只是文本中的一个错字 - 至少是基于函数的定义。