starling-lab / BoostSRL

BoostSRL: "Boosting for Statistical Relational Learning." A gradient-boosting based approach for learning different types of SRL models.
https://starling.utdallas.edu
GNU General Public License v3.0
32 stars 21 forks source link

Combined Trees #23

Open rodrigoazs opened 5 years ago

rodrigoazs commented 5 years ago

Hello everyone,

I have the following questions/concern.

  1. Number of positive and negative examples

I provided 80 positive examples and 80 negative examples as my training set but the generated file target_learnedWILLregressionTrees.txt shows the following values:

% # of pos examples                   = 160
% # of neg examples                   = 0

It happens in all cases, the number of pos examples are the sum of pos and negative ones.

  1. Learning the combined tree even if we do not ask for

If you see file train_learn_dribble.txt, the algorithm is learning a combined tree even if we do not set parameter "-combine". The parameter "-combine" is just deciding if the model should be saved or not. Is it supposed to happen? Is this also affecting the learning time printed?

  1. More examples than provided reached in Combined Tree

I set the algorithm to learn 10 boosted trees from 80 pos and 80 neg examples. Lookingt the file target_learnedWILLregressionTrees.txt generated I realized the combined tree shows much more examples reaching its branches.

The boosted trees seems correct, showing a total of 80 pos and 80 neg examples as shown below:

%%%%%  WILL-Produced Tree #1 @ 10:00:16 8/2/18.  [Using 2.811.544 memory cells.]  %%%%%

% FOR advisedby(A, B):
%   if ( professor(B), student(A) )
%   then if ( publication(C, B), publication(C, A) )
%   | then return 0.8581489350995117;  // std dev = 1,69e-07, 28,000 (wgt'ed) examples reached here.  /* #pos=28 */
%   | else if ( publication(D, A), publication(E, B) )
%   | | then if ( ta(F, A, G) )
%   | | | then return 0.6581489350995122;  // std dev = 0,894, 5,000 (wgt'ed) examples reached here.  /* #neg=1 #pos=4 */
%   | | | else if ( tempadvisedby(H, B) )
%   | | | | then return -0.14185106490048777;  // std dev = 0,000, 3,000 (wgt'ed) examples reached here.  /* #neg=3 */
%   | | | | else return 0.2581489350995122;  // std dev = 1,095, 5,000 (wgt'ed) examples reached here.  /* #neg=3 #pos=2 */
%   | | else if ( publication(I, B), publication(I, J), tempadvisedby(J, K) )
%   | | | then return 0.8581489350995123;  // std dev = 0,000, 8,000 (wgt'ed) examples reached here.  /* #pos=8 */
%   | | | else if ( publication(L, B), publication(L, M), ta(N, M, P) )
%   | | | | then if ( ta(Q, A, P) )
%   | | | | | then return 0.8581489350995121;  // std dev = 2,11e-08, 3,000 (wgt'ed) examples reached here.  /* #pos=3 */
%   | | | | | else return 0.5010060779566552;  // std dev = 1,793, 14,000 (wgt'ed) examples reached here.  /* #neg=5 #pos=9 */
%   | | | | else return 0.724815601766179;  // std dev = 0,340, 30,000 (wgt'ed) examples reached here.  /* #neg=4 #pos=26 */
%   else return -0.14185106490048766;  // std dev = 6,32e-08, 64,000 (wgt'ed) examples reached here.  /* #neg=64 */

However, the combined tree shows 10 times the numbers of examples provided (they sum up to 800 for pos and neg)

%%%%%  WILL-Produced Tree Combined @ 10:00:30 8/2/18.  [Using 3.171.552 memory cells.]  %%%%%

% FOR advisedby(A, B):
%   if ( professor(B), student(A) )
%   then if ( publication(C, B), publication(C, A) )
%   | then return 3.8410209430497844;  // std dev = 0,062, 280,000 (wgt'ed) examples reached here.  /* #pos=280 */
%   | else if ( publication(D, A), publication(D, E), professor(E) )
%   | | then if ( publication(F, B) )
%   | | | then if ( ta(G, A, H) )
%   | | | | then if ( tempadvisedby(I, B), ta(J, I, H) )
%   | | | | | then return -4.555077164707215;  // std dev = 2,92e-07, 10,000 (wgt'ed) examples reached here.  /* #neg=10 */
%   | | | | | else return 5.0721091709174075;  // std dev = 0,396, 20,000 (wgt'ed) examples reached here.  /* #pos=20 */
%   | | | | else return -0.5881219318434318;  // std dev = 3,203, 70,000 (wgt'ed) examples reached here.  /* #neg=60 #pos=10 */
%   | | | else return 4.165151166989849;  // std dev = 0,101, 40,000 (wgt'ed) examples reached here.  /* #pos=40 */
%   | | else if ( publication(K, A) )
%   | | | then return 4.64639912008772;  // std dev = 0,783, 40,000 (wgt'ed) examples reached here.  /* #pos=40 */
%   | | | else if ( tempadvisedby(L, B), ta(M, L, N) )
%   | | | | then return 3.7122536909001296;  // std dev = 2,383, 170,000 (wgt'ed) examples reached here.  /* #neg=10 #pos=160 */
%   | | | | else return 2.5656814524005243;  // std dev = 3,877, 330,000 (wgt'ed) examples reached here.  /* #neg=80 #pos=250 */
%   else return -0.9437262371086457;  // std dev = 0,000, 640,000 (wgt'ed) examples reached here.  /* #neg=640 */

Is this related to the number of trees learned? Is this also supposed to happen?

  1. Inference using Combined tree

Is there a way to perform inference using the combined tree model instead of boosted trees?

Thank you so much.