wavetrainer 0.0.30__tar.gz → 0.0.32__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {wavetrainer-0.0.30/wavetrainer.egg-info → wavetrainer-0.0.32}/PKG-INFO +1 -1
  2. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/setup.py +1 -1
  3. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/__init__.py +1 -1
  4. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/combined_reducer.py +14 -0
  5. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/trainer.py +21 -3
  6. {wavetrainer-0.0.30 → wavetrainer-0.0.32/wavetrainer.egg-info}/PKG-INFO +1 -1
  7. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/LICENSE +0 -0
  8. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/MANIFEST.in +0 -0
  9. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/README.md +0 -0
  10. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/requirements.txt +0 -0
  11. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/setup.cfg +0 -0
  12. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/tests/__init__.py +0 -0
  13. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/tests/model/__init__.py +0 -0
  14. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/tests/model/catboost_kwargs_test.py +0 -0
  15. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/tests/trainer_test.py +0 -0
  16. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/calibrator/__init__.py +0 -0
  17. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/calibrator/calibrator.py +0 -0
  18. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/calibrator/calibrator_router.py +0 -0
  19. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/calibrator/mapie_calibrator.py +0 -0
  20. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/calibrator/vennabers_calibrator.py +0 -0
  21. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/create.py +0 -0
  22. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/exceptions.py +0 -0
  23. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/fit.py +0 -0
  24. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/__init__.py +0 -0
  25. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/catboost_classifier_wrap.py +0 -0
  26. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/catboost_kwargs.py +0 -0
  27. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/catboost_model.py +0 -0
  28. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/catboost_regressor_wrap.py +0 -0
  29. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/model.py +0 -0
  30. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/model_router.py +0 -0
  31. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model/tabpfn_model.py +0 -0
  32. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/model_type.py +0 -0
  33. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/params.py +0 -0
  34. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/__init__.py +0 -0
  35. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/base_selector_reducer.py +0 -0
  36. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/constant_reducer.py +0 -0
  37. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/correlation_reducer.py +0 -0
  38. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/duplicate_reducer.py +0 -0
  39. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/nonnumeric_reducer.py +0 -0
  40. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/reducer.py +0 -0
  41. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/smart_correlation_reducer.py +0 -0
  42. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/reducer/unseen_reducer.py +0 -0
  43. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/selector/__init__.py +0 -0
  44. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/selector/selector.py +0 -0
  45. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/__init__.py +0 -0
  46. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/class_weights.py +0 -0
  47. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/combined_weights.py +0 -0
  48. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/exponential_weights.py +0 -0
  49. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/linear_weights.py +0 -0
  50. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/noop_weights.py +0 -0
  51. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/sigmoid_weights.py +0 -0
  52. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/weights.py +0 -0
  53. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/weights/weights_router.py +0 -0
  54. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/windower/__init__.py +0 -0
  55. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer/windower/windower.py +0 -0
  56. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer.egg-info/SOURCES.txt +0 -0
  57. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer.egg-info/dependency_links.txt +0 -0
  58. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer.egg-info/not-zip-safe +0 -0
  59. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer.egg-info/requires.txt +0 -0
  60. {wavetrainer-0.0.30 → wavetrainer-0.0.32}/wavetrainer.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wavetrainer
3
- Version: 0.0.30
3
+ Version: 0.0.32
4
4
  Summary: A library for automatically finding the optimal model within feature and hyperparameter space.
5
5
  Home-page: https://github.com/8W9aG/wavetrainer
6
6
  Author: Will Sackfield
@@ -23,7 +23,7 @@ def install_requires() -> typing.List[str]:
23
23
 
24
24
  setup(
25
25
  name='wavetrainer',
26
- version='0.0.30',
26
+ version='0.0.32',
27
27
  description='A library for automatically finding the optimal model within feature and hyperparameter space.',
28
28
  long_description=long_description,
29
29
  long_description_content_type='text/markdown',
@@ -2,5 +2,5 @@
2
2
 
3
3
  from .create import create
4
4
 
5
- __VERSION__ = "0.0.30"
5
+ __VERSION__ = "0.0.32"
6
6
  __all__ = ("create",)
@@ -18,6 +18,7 @@ from .unseen_reducer import UnseenReducer
18
18
 
19
19
  _COMBINED_REDUCER_FILE = "combined_reducer.json"
20
20
  _REDUCERS_KEY = "reducers"
21
+ _REMOVED_COLUMNS_FILE = "combined_reducer_removed_columns.json"
21
22
 
22
23
 
23
24
  class CombinedReducer(Reducer):
@@ -35,6 +36,7 @@ class CombinedReducer(Reducer):
35
36
  CorrelationReducer(),
36
37
  SmartCorrelationReducer(),
37
38
  ]
39
+ self._folder = None
38
40
 
39
41
  @classmethod
40
42
  def name(cls) -> str:
@@ -67,6 +69,7 @@ class CombinedReducer(Reducer):
67
69
  self._reducers.append(SmartCorrelationReducer())
68
70
  for reducer in self._reducers:
69
71
  reducer.load(folder)
72
+ self._folder = folder
70
73
 
71
74
  def save(self, folder: str, trial: optuna.Trial | optuna.trial.FrozenTrial) -> None:
72
75
  with open(
@@ -89,8 +92,19 @@ class CombinedReducer(Reducer):
89
92
  eval_x: pd.DataFrame | None = None,
90
93
  eval_y: pd.Series | pd.DataFrame | None = None,
91
94
  ) -> Self:
95
+ removed_columns_dict = {}
92
96
  for reducer in self._reducers:
97
+ before_columns = set(df.columns.values)
93
98
  df = reducer.fit_transform(df)
99
+ after_columns = set(df.columns.values)
100
+ removed_columns = before_columns.difference(after_columns)
101
+ if removed_columns:
102
+ removed_columns_dict[reducer.name()] = list(removed_columns)
103
+ if self._folder is not None:
104
+ with open(
105
+ os.path.join(self._folder, _REMOVED_COLUMNS_FILE), encoding="utf8"
106
+ ) as handle:
107
+ json.dump(removed_columns_dict, handle)
94
108
  return self
95
109
 
96
110
  def transform(self, df: pd.DataFrame) -> pd.DataFrame:
@@ -37,6 +37,7 @@ _TEST_SIZE_KEY = "test_size"
37
37
  _VALIDATION_SIZE_KEY = "validation_size"
38
38
  _IDX_USR_ATTR_KEY = "idx"
39
39
  _DT_COLUMN_KEY = "dt_column"
40
+ _BAD_OUTPUT = -1000.0
40
41
 
41
42
 
42
43
  def _assign_bin(timestamp, bins: list[datetime.datetime]) -> int:
@@ -209,6 +210,7 @@ class Trainer(Fit):
209
210
  folder = os.path.join(
210
211
  self._folder, str(y_series.name), split_idx.isoformat()
211
212
  )
213
+ new_folder = os.path.exists(folder)
212
214
  os.makedirs(folder, exist_ok=True)
213
215
  trial_file = os.path.join(folder, _TRIAL_FILENAME)
214
216
  if os.path.exists(trial_file):
@@ -234,8 +236,10 @@ class Trainer(Fit):
234
236
  x_train = windower.fit_transform(x_train)
235
237
  y_train = y_train[-len(x_train) :]
236
238
  if len(y_train.unique()) <= 1:
239
+ if new_folder:
240
+ os.removedirs(folder)
237
241
  logging.warning("Y train only contains 1 unique datapoint.")
238
- return -1.0
242
+ return _BAD_OUTPUT
239
243
 
240
244
  # Perform common reductions
241
245
  reducer = CombinedReducer()
@@ -297,7 +301,9 @@ class Trainer(Fit):
297
301
  return output
298
302
  except WavetrainException as exc:
299
303
  logging.warning(str(exc))
300
- return -1.0
304
+ if new_folder:
305
+ os.removedirs(folder)
306
+ return _BAD_OUTPUT
301
307
 
302
308
  start_validation_index = (
303
309
  dt_index.to_list()[-int(len(dt_index) * self._validation_size) - 1]
@@ -339,6 +345,18 @@ class Trainer(Fit):
339
345
  if self._max_train_timeout is None
340
346
  else self._max_train_timeout.total_seconds(),
341
347
  )
348
+ while (
349
+ study.best_trial.value is None or study.best_trial.value == _BAD_OUTPUT
350
+ ):
351
+ logging.info("Performing extra train")
352
+ study.optimize(
353
+ test_objective,
354
+ n_trials=1,
355
+ show_progress_bar=True,
356
+ timeout=None
357
+ if self._max_train_timeout is None
358
+ else self._max_train_timeout.total_seconds(),
359
+ )
342
360
 
343
361
  train_len = len(df[dt_index < start_test_index])
344
362
  test_len = len(
@@ -372,7 +390,7 @@ class Trainer(Fit):
372
390
 
373
391
  test_df = df.iloc[: train_len + count + test_len]
374
392
  test_series = y_series.iloc[: train_len + count + test_len]
375
- if len(test_df) <= 2:
393
+ if len(test_df) <= 3:
376
394
  continue
377
395
 
378
396
  if test_idx < start_validation_index:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wavetrainer
3
- Version: 0.0.30
3
+ Version: 0.0.32
4
4
  Summary: A library for automatically finding the optimal model within feature and hyperparameter space.
5
5
  Home-page: https://github.com/8W9aG/wavetrainer
6
6
  Author: Will Sackfield
File without changes
File without changes
File without changes
File without changes