This file is indexed.

/usr/share/Yap/clpbn/learning/mle.yap is in yap 6.2.2-6.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
%
% Maximum likelihood estimator and friends.
%
%
% This assumes we have a single big example.
%

:- module(clpbn_mle, [learn_parameters/2,
		      learn_parameters/3,
		      parameters_from_evidence/3]).

:- use_module(library('clpbn')).
	      
:- use_module(library('clpbn/learning/learn_utils'),
	      [run_all/1,
	       clpbn_vars/2,
	       normalise_counts/2,
	       soften_table/2,
	       normalise_counts/2]).

:- use_module(library('clpbn/dists'),
	      [empty_dist/2,
	       dist_new_table/2]).

:- use_module(library(matrix),
	      [matrix_inc/2]).


learn_parameters(Items, Tables) :-
	learn_parameters(Items, Tables, []).

%
% full evidence learning
%
learn_parameters(Items, Tables, Extras) :-
	run_all(Items),
	attributes:all_attvars(AVars),
	% sort and incorporate evidence
	clpbn_vars(AVars, AllVars),
	mk_sample(AllVars, Sample),
	compute_tables(Extras, Sample, Tables).

parameters_from_evidence(AllVars, Sample, Extras) :-
	mk_sample_from_evidence(AllVars, Sample),
	compute_tables(Extras, Sample, Tables).

mk_sample_from_evidence(AllVars, SortedSample) :-
	add_evidence2sample(AllVars, Sample),
	msort(Sample, SortedSample).

mk_sample(AllVars, SortedSample) :-
	add2sample(AllVars, Sample),
	msort(Sample, SortedSample).

%
% assumes we have full data, meaning evidence for every variable 
%
add2sample([],  []).
add2sample([V|Vs],[val(Id,[Ev|EParents])|Vals]) :-
	clpbn:get_atts(V, [evidence(Ev),dist(Id,Parents)]),
	get_eparents(Parents, EParents),
	add2sample(Vs, Vals).

get_eparents([P|Parents], [E|EParents]) :-
	clpbn:get_atts(P, [evidence(E)]),
	get_eparents(Parents, EParents).
get_eparents([], []).


%
% assumes we ignore variables without evidence or without evidence
% on a parent!
%
add_evidence2sample([],  []).
add_evidence2sample([V|Vs],[val(Id,[Ev|EParents])|Vals]) :-
	clpbn:get_atts(V, [evidence(Ev),dist(Id,Parents)]),
	get_eveparents(Parents, EParents), !,
	add_evidence2sample(Vs, Vals).
add_evidence2sample([_|Vs],Vals) :-
	add_evidence2sample(Vs, Vals).

get_eveparents([P|Parents], [E|EParents]) :-
	clpbn:get_atts(P, [evidence(E)]),
	get_eparents(Parents, EParents).
get_eveparents([], []).


compute_tables(Parameters, Sample, NewTables) :-
	estimator(Sample, Tables),
	add_priors(Parameters, Tables, NewTables).

estimator([], []).
estimator([val(Id,Sample)|Samples], [NewDist|Tables]) :-
	empty_dist(Id, NewTable),
	id_samples(Id, Samples, IdSamples, MoreSamples),
	mle([Sample|IdSamples], NewTable),
	soften_table(NewTable, SoftenedTable),
	normalise_counts(SoftenedTable, NewDist),
	% replace matrix in distribution
	dist_new_table(Id, NewDist),
	estimator(MoreSamples, Tables).


id_samples(_, [], [], []).
id_samples(Id, [val(Id,Sample)|Samples], [Sample|IdSamples], MoreSamples) :- !,
	id_samples(Id, Samples, IdSamples, MoreSamples).
id_samples(_, Samples, [], Samples).

mle([Sample|IdSamples], Table) :-
	matrix_inc(Table, Sample),
	mle(IdSamples, Table).
mle([], _).