1
- import logging
2
- from typing import Any , Dict , List , Optional
1
+ from typing import Sequence
3
2
4
3
from irspack .definitions import InteractionMatrix
5
4
6
- from ..evaluator import Evaluator
7
5
from ..optimizers .base_optimizer import (
8
6
BaseOptimizer ,
9
7
BaseOptimizerWithEarlyStopping ,
23
21
CosineUserKNNRecommender ,
24
22
DenseSLIMRecommender ,
25
23
EDLAERecommender ,
26
- IALSRecommender ,
27
24
JaccardKNNRecommender ,
28
25
P3alphaRecommender ,
29
26
RP3betaRecommender ,
@@ -51,64 +48,24 @@ def _get_maximal_n_components_for_budget(
51
48
52
49
53
50
class TopPopOptimizer (BaseOptimizer ):
54
- default_tune_range : List [Suggestion ] = []
51
+ default_tune_range : Sequence [Suggestion ] = []
55
52
recommender_class = TopPopRecommender
56
53
57
54
@classmethod
58
55
def tune_range_given_memory_budget (
59
56
cls , X : InteractionMatrix , memory_budget : int
60
- ) -> List [Suggestion ]:
57
+ ) -> Sequence [Suggestion ]:
61
58
return []
62
59
63
60
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
-
104
61
class DenseSLIMOptimizer (BaseOptimizer ):
105
- default_tune_range : List [Suggestion ] = [LogUniformSuggestion ("reg" , 1 , 1e4 )]
62
+ default_tune_range : Sequence [Suggestion ] = [LogUniformSuggestion ("reg" , 1 , 1e4 )]
106
63
recommender_class = DenseSLIMRecommender
107
64
108
65
@classmethod
109
66
def tune_range_given_memory_budget (
110
67
cls , X : InteractionMatrix , memory_budget : int
111
- ) -> List [Suggestion ]:
68
+ ) -> Sequence [Suggestion ]:
112
69
n_items : int = X .shape [1 ]
113
70
if (1e6 * memory_budget ) < (4 * 2 * n_items ** 2 ):
114
71
raise LowMemoryError (
@@ -118,7 +75,7 @@ def tune_range_given_memory_budget(
118
75
119
76
120
77
class EDLAEOptimizer (BaseOptimizer ):
121
- default_tune_range : List [Suggestion ] = [
78
+ default_tune_range : Sequence [Suggestion ] = [
122
79
LogUniformSuggestion ("reg" , 1 , 1e4 ),
123
80
UniformSuggestion ("dropout_p" , 0.0 , 0.99 ),
124
81
]
@@ -127,7 +84,7 @@ class EDLAEOptimizer(BaseOptimizer):
127
84
@classmethod
128
85
def tune_range_given_memory_budget (
129
86
cls , X : InteractionMatrix , memory_budget : int
130
- ) -> List [Suggestion ]:
87
+ ) -> Sequence [Suggestion ]:
131
88
n_items : int = X .shape [1 ]
132
89
if (1e6 * memory_budget ) < (4 * 2 * n_items ** 2 ):
133
90
raise LowMemoryError (
@@ -146,7 +103,7 @@ class TruncatedSVDOptimizer(BaseOptimizer):
146
103
@classmethod
147
104
def tune_range_given_memory_budget (
148
105
cls , X : InteractionMatrix , memory_budget : int
149
- ) -> List [Suggestion ]:
106
+ ) -> Sequence [Suggestion ]:
150
107
n_components = _get_maximal_n_components_for_budget (X , memory_budget , 512 )
151
108
return [
152
109
IntegerSuggestion ("n_components" , 4 , n_components ),
@@ -163,7 +120,7 @@ class NMFOptimizer(BaseOptimizer):
163
120
@classmethod
164
121
def tune_range_given_memory_budget (
165
122
cls , X : InteractionMatrix , memory_budget : int
166
- ) -> List [Suggestion ]:
123
+ ) -> Sequence [Suggestion ]:
167
124
n_components = _get_maximal_n_components_for_budget (X , memory_budget , 512 )
168
125
return [
169
126
IntegerSuggestion ("n_components" , 4 , n_components ),
@@ -177,7 +134,7 @@ class SimilarityBasedOptimizerBase(BaseOptimizer):
177
134
@classmethod
178
135
def tune_range_given_memory_budget (
179
136
cls , X : InteractionMatrix , memory_budget : int
180
- ) -> List [Suggestion ]:
137
+ ) -> Sequence [Suggestion ]:
181
138
top_k_max = min (int (1e6 * memory_budget / 4 // (X .shape [1 ] + 1 )), 1024 )
182
139
if top_k_max <= 4 :
183
140
raise LowMemoryError (
@@ -249,7 +206,7 @@ class UserSimilarityBasedOptimizerBase(BaseOptimizer):
249
206
@classmethod
250
207
def tune_range_given_memory_budget (
251
208
cls , X : InteractionMatrix , memory_budget : int
252
- ) -> List [Suggestion ]:
209
+ ) -> Sequence [Suggestion ]:
253
210
top_k_max = min (int (1e6 * memory_budget / 4 // (X .shape [0 ] + 1 )), 1024 )
254
211
return [
255
212
IntegerSuggestion ("top_k" , 4 , top_k_max ),
@@ -287,7 +244,7 @@ class BPRFMOptimizer(BaseOptimizerWithEarlyStopping):
287
244
@classmethod
288
245
def tune_range_given_memory_budget (
289
246
cls , X : InteractionMatrix , memory_budget : int
290
- ) -> List [Suggestion ]:
247
+ ) -> Sequence [Suggestion ]:
291
248
# memory usage will be roughly 4 (float) * (n_users + n_items) * k
292
249
n_components = _get_maximal_n_components_for_budget (X , memory_budget , 300 )
293
250
return [
@@ -312,7 +269,7 @@ class MultVAEOptimizer(BaseOptimizerWithEarlyStopping):
312
269
@classmethod
313
270
def tune_range_given_memory_budget (
314
271
cls , X : InteractionMatrix , memory_budget : int
315
- ) -> List [Suggestion ]:
272
+ ) -> Sequence [Suggestion ]:
316
273
if memory_budget * 1e6 > (X .shape [1 ] * 2048 * 8 ):
317
274
raise LowMemoryError (
318
275
f"Memory budget { memory_budget } too small for MultVAE to work."
0 commit comments