1
1
import pandas as pd
2
2
import numpy as np
3
+ from lenskit .data import Dataset
4
+
3
5
from lkauto .utils .filer import Filer
4
6
from lkauto .utils .get_model_from_cs import get_model_from_cs
5
7
6
8
from lkauto .ensemble .greedy_ensemble_selection import EnsembleSelection
7
9
8
10
9
- def build_ensemble (train : pd . DataFrame ,
11
+ def build_ensemble (train : Dataset ,
10
12
top_n_runs : pd .DataFrame ,
11
13
filer : Filer ,
12
14
ensemble_size : int ,
13
15
lenskit_metric ,
14
16
maximize_metric : bool ):
15
17
config_ids = top_n_runs .sort_values (by = 'error' , ascending = True )['run_id' ]
16
- ensemble_y = train ['rating' ]
17
- ensemble_X = []
18
+ ensemble_y = train . interaction_table ( format = "pandas" ) ['rating' ]
19
+ ensemble_x = []
18
20
val_indices = None
19
21
bm_cs_list = []
20
22
@@ -32,12 +34,12 @@ def build_ensemble(train: pd.DataFrame,
32
34
val_indices = bm_pred [list (bm_pred )[0 ]]
33
35
34
36
# Append predictions to ensemble train X
35
- ensemble_X .append (np .array (bm_pred [list (bm_pred )[1 ]]))
37
+ ensemble_x .append (np .array (bm_pred [list (bm_pred )[1 ]]))
36
38
37
39
ensemble_y = np .array (ensemble_y .loc [val_indices ])
38
40
39
41
es = EnsembleSelection (ensemble_size = ensemble_size , lenskit_metric = lenskit_metric , maximize_metric = maximize_metric )
40
- es .ensemble_fit (ensemble_X , ensemble_y )
42
+ es .ensemble_fit (ensemble_x , ensemble_y )
41
43
es .base_models = [get_model_from_cs (cs , feedback = 'explicit' ) for cs , weight in zip (bm_cs_list , es .weights_ ) if weight > 0 ]
42
44
es .old_to_new_idx = {old_i : new_i for new_i , old_i in enumerate ([idx for idx , weight in enumerate (es .weights_ ) if weight > 0 ])}
43
45
0 commit comments