support for randomising or making uniform all distributions before starting EM
This commit is contained in:
parent
4f1d7d0524
commit
ac34be01b0
@ -20,8 +20,11 @@
|
||||
get_evidence_from_position/3,
|
||||
dist_to_term/2,
|
||||
empty_dist/2,
|
||||
dist_new_table/2,
|
||||
all_dist_ids/1
|
||||
all_dist_ids/1,
|
||||
randomise_all_dists/0,
|
||||
randomise_dist/1,
|
||||
uniformise_all_dists/0,
|
||||
uniformise_dist/1
|
||||
]).
|
||||
|
||||
:- use_module(library(lists),[is_list/1,nth0/3]).
|
||||
@ -32,6 +35,10 @@
|
||||
matrix_to_list/2,
|
||||
matrix_to_logs/1]).
|
||||
|
||||
:- use_module(library('clpbn/matrix_cpt_utils'),
|
||||
[random_CPT/2,
|
||||
uniform_CPT/2]).
|
||||
|
||||
/*
|
||||
:- mode dist(+, -).
|
||||
|
||||
@ -258,3 +265,24 @@ copy_Lstructure([H|LKey], [NH|LKey0]) :-
|
||||
copy_structure(H, NH),
|
||||
copy_Lstructure(LKey, LKey0).
|
||||
|
||||
randomise_all_dists :-
|
||||
randomise_dist(_),
|
||||
fail.
|
||||
randomise_all_dists.
|
||||
|
||||
randomise_dist(Dist) :-
|
||||
recorded(clpbn_dist_psizes, db(Dist,DSizes), _),
|
||||
random_CPT(DSizes, NewCPT),
|
||||
dist_new_table(Dist, NewCPT).
|
||||
|
||||
uniformise_all_dists :-
|
||||
uniformise_dist(_),
|
||||
fail.
|
||||
uniformise_all_dists.
|
||||
|
||||
uniformise_dist(Dist) :-
|
||||
recorded(clpbn_dist_psizes, db(Dist,DSizes), _),
|
||||
uniform_CPT(DSizes, NewCPT),
|
||||
dist_new_table(Dist, NewCPT).
|
||||
|
||||
|
||||
|
@ -15,7 +15,9 @@
|
||||
multiply_factors/3,
|
||||
normalise_possibly_deterministic_CPT/2,
|
||||
column_from_possibly_deterministic_CPT/3,
|
||||
multiply_possibly_deterministic_factors/3]).
|
||||
multiply_possibly_deterministic_factors/3,
|
||||
random_CPT/2,
|
||||
uniform_CPT/2]).
|
||||
|
||||
:- use_module(dists,
|
||||
[get_dist_domain_size/2,
|
||||
@ -26,6 +28,7 @@
|
||||
matrix_new_set/4,
|
||||
matrix_select/4,
|
||||
matrix_dims/2,
|
||||
matrix_size/2,
|
||||
matrix_shuffle/3,
|
||||
matrix_expand/3,
|
||||
matrix_op/4,
|
||||
@ -229,3 +232,25 @@ normalise_possibly_deterministic_CPT(MAT,NMAT) :-
|
||||
matrix_agg_lines(MAT, +, Sum),
|
||||
matrix_op_to_lines(MAT, Sum, /, NMAT).
|
||||
|
||||
random_CPT(Dims, M) :-
|
||||
mult_all(Dims,1,Size),
|
||||
generate_random_entries(Size, Randoms),
|
||||
matrix_new(floats, Dims, Randoms, M1),
|
||||
normalise_possibly_deterministic_CPT(M1, M).
|
||||
|
||||
mult_all([],Size,Size).
|
||||
mult_all([D|Dims],Size0,Size) :-
|
||||
Size1 is Size0*D,
|
||||
mult_all(Dims,Size1,Size).
|
||||
|
||||
generate_random_entries(0, []) :- !.
|
||||
generate_random_entries(Size, [R|Randoms]) :-
|
||||
R is random,
|
||||
Size1 is Size-1,
|
||||
generate_random_entries(Size1, Randoms).
|
||||
|
||||
uniform_CPT(Dims, M) :-
|
||||
matrix_new_set(floats,Dims,1.0,M1),
|
||||
normalise_possibly_deterministic_CPT(M1, M).
|
||||
|
||||
|
@ -16,7 +16,9 @@
|
||||
[get_dist_domain_size/2,
|
||||
empty_dist/2,
|
||||
dist_new_table/2,
|
||||
get_dist_key/2]).
|
||||
get_dist_key/2,
|
||||
randomise_all_dists/0,
|
||||
uniformise_all_dists/0]).
|
||||
|
||||
:- use_module(library('clpbn/connected'),
|
||||
[clpbn_subgraphs/2]).
|
||||
@ -62,6 +64,8 @@ em(Items, MaxError, MaxIts, Tables, Likelihood) :-
|
||||
% and more detailed info on distributions, namely with a list of all instances for the distribution.
|
||||
init_em(Items, state( AllDists, AllDistInstances, MargVars, SolverVars)) :-
|
||||
run_all(Items),
|
||||
% randomise_all_dists,
|
||||
uniformise_all_dists,
|
||||
attributes:all_attvars(AllVars0),
|
||||
sort_vars_by_key(AllVars0,AllVars1,[]),
|
||||
% remove variables that do not have to do with this query.
|
||||
|
Reference in New Issue
Block a user