@@ -393,10 +393,11 @@ def _gen_sample_recursion(self,node:_Node,x_continuous,x_categorical):
393
393
return node .sub_model .gen_sample (sample_size = 1 )
394
394
else :
395
395
if node .k < self .c_dim_continuous :
396
- for i in range (self .c_num_children_vec [node .k ]):
396
+ index = 0
397
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
397
398
if x_continuous [node .k ] < node .thresholds [i + 1 ]:
398
- index = i
399
399
break
400
+ index += 1
400
401
else :
401
402
index = x_categorical [node .k - self .c_dim_continuous ]
402
403
return self ._gen_sample_recursion (node .children [index ],x_continuous ,x_categorical )
@@ -1651,10 +1652,12 @@ def _update_posterior_recursion(self,node:_Node,x_continuous,x_categorical,y):
1651
1652
return self ._update_posterior_leaf (node ,y )
1652
1653
else : # inner node
1653
1654
if node .k < self .c_dim_continuous :
1654
- for i in range (self .c_num_children_vec [node .k ]):
1655
+ index = 0
1656
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
1655
1657
if x_continuous [node .k ] < node .thresholds [i + 1 ]:
1656
- index = i
1657
1658
break
1659
+ index += 1
1660
+ # index = np.count_nonzero(node.thresholds[1:-1]<x_continuous[node.k]) # slower
1658
1661
else :
1659
1662
index = x_categorical [node .k - self .c_dim_continuous ]
1660
1663
tmp1 = self ._update_posterior_recursion (node .children [index ],x_continuous ,x_categorical ,y )
@@ -1672,10 +1675,12 @@ def _update_posterior_recursion_lr(self,node:_Node,x_continuous,x_categorical,y)
1672
1675
return self ._update_posterior_leaf_lr (node ,x_continuous ,y )
1673
1676
else : # inner node
1674
1677
if node .k < self .c_dim_continuous :
1675
- for i in range (self .c_num_children_vec [node .k ]):
1678
+ index = 0
1679
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
1676
1680
if x_continuous [node .k ] < node .thresholds [i + 1 ]:
1677
- index = i
1678
1681
break
1682
+ index += 1
1683
+ # index = np.count_nonzero(node.thresholds[1:-1]<x_continuous[node.k]) # slower
1679
1684
else :
1680
1685
index = x_categorical [node .k - self .c_dim_continuous ]
1681
1686
tmp1 = self ._update_posterior_recursion_lr (node .children [index ],x_continuous ,x_categorical ,y )
@@ -2302,10 +2307,11 @@ def _calc_pred_dist_recursion(self,node:_Node,x_continuous,x_categorical):
2302
2307
node .sub_model .calc_pred_dist ()
2303
2308
if not node .leaf : # inner node
2304
2309
if node .k < self .c_dim_continuous :
2305
- for i in range (self .c_num_children_vec [node .k ]):
2310
+ index = 0
2311
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
2306
2312
if x_continuous [node .k ] < node .thresholds [i + 1 ]:
2307
- index = i
2308
2313
break
2314
+ index += 1
2309
2315
else :
2310
2316
index = x_categorical [node .k - self .c_dim_continuous ]
2311
2317
self ._calc_pred_dist_recursion (node .children [index ],x_continuous ,x_categorical )
@@ -2314,10 +2320,11 @@ def _calc_pred_dist_recursion_lr(self,node:_Node,x_continuous,x_categorical):
2314
2320
node .sub_model ._calc_pred_dist (x_continuous )
2315
2321
if not node .leaf : # inner node
2316
2322
if node .k < self .c_dim_continuous :
2317
- for i in range (self .c_num_children_vec [node .k ]):
2323
+ index = 0
2324
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
2318
2325
if x_continuous [node .k ] < node .thresholds [i + 1 ]:
2319
- index = i
2320
2326
break
2327
+ index += 1
2321
2328
else :
2322
2329
index = x_categorical [node .k - self .c_dim_continuous ]
2323
2330
self ._calc_pred_dist_recursion_lr (node .children [index ],x_continuous ,x_categorical )
@@ -2352,10 +2359,11 @@ def _make_prediction_recursion_squared(self,node:_Node):
2352
2359
return node .sub_model .make_prediction (loss = 'squared' )
2353
2360
else : # inner node
2354
2361
if node .k < self .c_dim_continuous :
2355
- for i in range (self .c_num_children_vec [node .k ]):
2362
+ index = 0
2363
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
2356
2364
if self ._tmp_x_continuous [node .k ] < node .thresholds [i + 1 ]:
2357
- index = i
2358
2365
break
2366
+ index += 1
2359
2367
else :
2360
2368
index = self ._tmp_x_categorical [node .k - self .c_dim_continuous ]
2361
2369
return ((1 - node .h_g ) * node .sub_model .make_prediction (loss = 'squared' )
@@ -2366,10 +2374,11 @@ def _make_prediction_recursion_kl(self,node:_Node):
2366
2374
return node .sub_model .make_prediction (loss = 'KL' )
2367
2375
else : # inner node
2368
2376
if node .k < self .c_dim_continuous :
2369
- for i in range (self .c_num_children_vec [node .k ]):
2377
+ index = 0
2378
+ for i in range (self .c_num_children_vec [node .k ]- 1 ):
2370
2379
if self ._tmp_x_continuous [node .k ] < node .thresholds [i + 1 ]:
2371
- index = i
2372
2380
break
2381
+ index += 1
2373
2382
else :
2374
2383
index = self ._tmp_x_categorical [node .k - self .c_dim_continuous ]
2375
2384
return ((1 - node .h_g ) * node .sub_model .make_prediction (loss = 'KL' )
0 commit comments