1
1
import pandas as pd
2
2
import numpy as np
3
+ from lenskit import Pipeline
3
4
from lenskit .data import Dataset
5
+ from typing import List
6
+
7
+ from lenskit .pipeline import predict_pipeline
4
8
5
9
from lkauto .utils .filer import Filer
6
10
from lkauto .utils .get_model_from_cs import get_model_from_cs
@@ -40,7 +44,8 @@ def build_ensemble(train: Dataset,
40
44
41
45
es = EnsembleSelection (ensemble_size = ensemble_size , lenskit_metric = lenskit_metric , maximize_metric = maximize_metric )
42
46
es .ensemble_fit (ensemble_x , ensemble_y )
43
- es .base_models = [get_model_from_cs (cs , feedback = 'explicit' ) for cs , weight in zip (bm_cs_list , es .weights_ ) if weight > 0 ]
47
+ es .base_models_tmp = [get_model_from_cs (cs , feedback = 'explicit' ) for cs , weight in zip (bm_cs_list , es .weights_ ) if weight > 0 ]
48
+ es .base_models = models_to_pipelines (base_models = es .base_models_tmp )
44
49
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 ])}
45
50
46
51
incumbent = {"model" : str (es ),
@@ -51,3 +56,12 @@ def build_ensemble(train: Dataset,
51
56
"weights" : list (es .weights_ )}
52
57
53
58
return es , incumbent
59
+
60
+ def models_to_pipelines (base_models ) -> List [Pipeline ]:
61
+ pipelines = []
62
+
63
+ for model in base_models :
64
+ pipeline = predict_pipeline (model )
65
+ pipelines .append (pipeline )
66
+
67
+ return pipelines
0 commit comments