1- import logging
2- from typing import Any , Dict , List , Optional
1+ from typing import Sequence
32
43from irspack .definitions import InteractionMatrix
54
6- from ..evaluator import Evaluator
75from ..optimizers .base_optimizer import (
86 BaseOptimizer ,
97 BaseOptimizerWithEarlyStopping ,
2321 CosineUserKNNRecommender ,
2422 DenseSLIMRecommender ,
2523 EDLAERecommender ,
26- IALSRecommender ,
2724 JaccardKNNRecommender ,
2825 P3alphaRecommender ,
2926 RP3betaRecommender ,
@@ -51,64 +48,24 @@ def _get_maximal_n_components_for_budget(
5148
5249
5350class TopPopOptimizer (BaseOptimizer ):
54- default_tune_range : List [Suggestion ] = []
51+ default_tune_range : Sequence [Suggestion ] = []
5552 recommender_class = TopPopRecommender
5653
5754 @classmethod
5855 def tune_range_given_memory_budget (
5956 cls , X : InteractionMatrix , memory_budget : int
60- ) -> List [Suggestion ]:
57+ ) -> Sequence [Suggestion ]:
6158 return []
6259
6360
64- class IALSOptimizer (BaseOptimizerWithEarlyStopping ):
65- default_tune_range = [
66- IntegerSuggestion ("n_components" , 4 , 300 ),
67- LogUniformSuggestion ("alpha0" , 3e-3 , 1 ),
68- LogUniformSuggestion ("reg" , 1e-4 , 1e-1 ),
69- ]
70- recommender_class = IALSRecommender
71-
72- def __init__ (
73- self ,
74- data : InteractionMatrix ,
75- val_evaluator : Evaluator ,
76- logger : Optional [logging .Logger ] = None ,
77- suggest_overwrite : List [Suggestion ] = [],
78- fixed_params : Dict [str , Any ] = {},
79- max_epoch : int = 16 ,
80- validate_epoch : int = 1 ,
81- score_degradation_max : int = 5 ,
82- ):
83- super ().__init__ (
84- data ,
85- val_evaluator ,
86- logger = logger ,
87- suggest_overwrite = suggest_overwrite ,
88- fixed_params = fixed_params ,
89- max_epoch = max_epoch ,
90- validate_epoch = validate_epoch ,
91- score_degradation_max = score_degradation_max ,
92- )
93-
94- @classmethod
95- def tune_range_given_memory_budget (
96- cls , X : InteractionMatrix , memory_budget : int
97- ) -> List [Suggestion ]:
98- n_components = _get_maximal_n_components_for_budget (X , memory_budget , 300 )
99- return [
100- IntegerSuggestion ("n_components" , 4 , n_components ),
101- ]
102-
103-
10461class DenseSLIMOptimizer (BaseOptimizer ):
105- default_tune_range : List [Suggestion ] = [LogUniformSuggestion ("reg" , 1 , 1e4 )]
62+ default_tune_range : Sequence [Suggestion ] = [LogUniformSuggestion ("reg" , 1 , 1e4 )]
10663 recommender_class = DenseSLIMRecommender
10764
10865 @classmethod
10966 def tune_range_given_memory_budget (
11067 cls , X : InteractionMatrix , memory_budget : int
111- ) -> List [Suggestion ]:
68+ ) -> Sequence [Suggestion ]:
11269 n_items : int = X .shape [1 ]
11370 if (1e6 * memory_budget ) < (4 * 2 * n_items ** 2 ):
11471 raise LowMemoryError (
@@ -118,7 +75,7 @@ def tune_range_given_memory_budget(
11875
11976
12077class EDLAEOptimizer (BaseOptimizer ):
121- default_tune_range : List [Suggestion ] = [
78+ default_tune_range : Sequence [Suggestion ] = [
12279 LogUniformSuggestion ("reg" , 1 , 1e4 ),
12380 UniformSuggestion ("dropout_p" , 0.0 , 0.99 ),
12481 ]
@@ -127,7 +84,7 @@ class EDLAEOptimizer(BaseOptimizer):
12784 @classmethod
12885 def tune_range_given_memory_budget (
12986 cls , X : InteractionMatrix , memory_budget : int
130- ) -> List [Suggestion ]:
87+ ) -> Sequence [Suggestion ]:
13188 n_items : int = X .shape [1 ]
13289 if (1e6 * memory_budget ) < (4 * 2 * n_items ** 2 ):
13390 raise LowMemoryError (
@@ -146,7 +103,7 @@ class TruncatedSVDOptimizer(BaseOptimizer):
146103 @classmethod
147104 def tune_range_given_memory_budget (
148105 cls , X : InteractionMatrix , memory_budget : int
149- ) -> List [Suggestion ]:
106+ ) -> Sequence [Suggestion ]:
150107 n_components = _get_maximal_n_components_for_budget (X , memory_budget , 512 )
151108 return [
152109 IntegerSuggestion ("n_components" , 4 , n_components ),
@@ -163,7 +120,7 @@ class NMFOptimizer(BaseOptimizer):
163120 @classmethod
164121 def tune_range_given_memory_budget (
165122 cls , X : InteractionMatrix , memory_budget : int
166- ) -> List [Suggestion ]:
123+ ) -> Sequence [Suggestion ]:
167124 n_components = _get_maximal_n_components_for_budget (X , memory_budget , 512 )
168125 return [
169126 IntegerSuggestion ("n_components" , 4 , n_components ),
@@ -177,7 +134,7 @@ class SimilarityBasedOptimizerBase(BaseOptimizer):
177134 @classmethod
178135 def tune_range_given_memory_budget (
179136 cls , X : InteractionMatrix , memory_budget : int
180- ) -> List [Suggestion ]:
137+ ) -> Sequence [Suggestion ]:
181138 top_k_max = min (int (1e6 * memory_budget / 4 // (X .shape [1 ] + 1 )), 1024 )
182139 if top_k_max <= 4 :
183140 raise LowMemoryError (
@@ -249,7 +206,7 @@ class UserSimilarityBasedOptimizerBase(BaseOptimizer):
249206 @classmethod
250207 def tune_range_given_memory_budget (
251208 cls , X : InteractionMatrix , memory_budget : int
252- ) -> List [Suggestion ]:
209+ ) -> Sequence [Suggestion ]:
253210 top_k_max = min (int (1e6 * memory_budget / 4 // (X .shape [0 ] + 1 )), 1024 )
254211 return [
255212 IntegerSuggestion ("top_k" , 4 , top_k_max ),
@@ -287,7 +244,7 @@ class BPRFMOptimizer(BaseOptimizerWithEarlyStopping):
287244 @classmethod
288245 def tune_range_given_memory_budget (
289246 cls , X : InteractionMatrix , memory_budget : int
290- ) -> List [Suggestion ]:
247+ ) -> Sequence [Suggestion ]:
291248 # memory usage will be roughly 4 (float) * (n_users + n_items) * k
292249 n_components = _get_maximal_n_components_for_budget (X , memory_budget , 300 )
293250 return [
@@ -312,7 +269,7 @@ class MultVAEOptimizer(BaseOptimizerWithEarlyStopping):
312269 @classmethod
313270 def tune_range_given_memory_budget (
314271 cls , X : InteractionMatrix , memory_budget : int
315- ) -> List [Suggestion ]:
272+ ) -> Sequence [Suggestion ]:
316273 if memory_budget * 1e6 > (X .shape [1 ] * 2048 * 8 ):
317274 raise LowMemoryError (
318275 f"Memory budget { memory_budget } too small for MultVAE to work."
0 commit comments