私はbayesnet toolboxのコードを使って作業しています。特定の関数呼び出しによってどのメソッドがディスパッチされるのかを知るためには苦労しています。関数によって呼び出されるメソッドを決定する
例えば、コール
convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence)
複数convert_to_pot
機能(in folders here)がありますが、呼び出されたので、具体的なCPDの種類、およびのために、私が思うに、オブジェクトbnet.CPD
のいくつかのプロパティによって決定されます。 CPDノードが離散的であれば、それは@discrete_CPD
と呼ばれると思いますが、確かに見る方法はありますか?関数呼び出しの結果である構造体から通知することができます。ありがとう
methods(convert_to_pot)
返信は、を返します。
Aを例に
% set up graph and CPD's
N = 4;
dag = zeros(N,N);
C = 1; S = 2; R = 3; W = 4;
dag(C,[R S]) = 1;
dag(R,W) = 1;
dag(S,W)=1;
discrete_nodes = 1:N;
node_sizes = 2*ones(1,N);
bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
%evidence node
evidence = cell(1,N);
evidence{W} = 2;
ns = bnet.node_sizes(:); [2 2 2 2]
onodes = find(~isemptycell(evidence)); % 4
hnodes = find(isemptycell(evidence)); % 1 2 3
pot_type = determine_pot_type(bnet, onodes); % 'd' :discrete
fam = family(bnet.dag, 4); % 2 3 4
働いた関数呼び出しとコメントから
pot = convert_to_pot(bnet.CPD{4}, pot_type, fam(:), evidence)
% discrete potential object
% domain: [2 3 4]
% T: [2x2 double]
% sizes: [2 2 1]
更新をもたらします。
>> methods(bnet.CPD{e})
Methods for class tabular_CPD:
CPD_to_CPT learn_params maximize_params update_ess
bayes_update_params log_marg_prob_node reset_ess update_ess_simple
display log_nextcase_prob_node set_fields
get_field log_prior tabular_CPD
>> class(bnet.CPD{e})
ans =
tabular_CPD
>> superclasses(bnet.CPD{4})
No class tabular_CPD.
しかし@tabular_CPD
はconvert_to_pot
機能はありません。
あなたはちょうどmatlabのオーバーロードを指していますか? @ zhqiat; – zhqiat
;はい、私はこれが一種のものだと思います。しかし、私は検索パスがどのように行われているのかわかりません。 – user2957945