wavetrainer 0.0.14__tar.gz → 0.0.16__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 (58) hide show
  1. {wavetrainer-0.0.14/wavetrainer.egg-info → wavetrainer-0.0.16}/PKG-INFO +1 -1
  2. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/setup.py +1 -1
  3. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/__init__.py +1 -1
  4. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/combined_reducer.py +10 -1
  5. wavetrainer-0.0.16/wavetrainer/reducer/unseen_reducer.py +58 -0
  6. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/selector/selector.py +9 -1
  7. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/trainer.py +1 -1
  8. {wavetrainer-0.0.14 → wavetrainer-0.0.16/wavetrainer.egg-info}/PKG-INFO +1 -1
  9. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer.egg-info/SOURCES.txt +1 -0
  10. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/LICENSE +0 -0
  11. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/MANIFEST.in +0 -0
  12. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/README.md +0 -0
  13. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/requirements.txt +0 -0
  14. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/setup.cfg +0 -0
  15. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/tests/__init__.py +0 -0
  16. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/tests/model/__init__.py +0 -0
  17. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/tests/model/catboost_kwargs_test.py +0 -0
  18. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/tests/trainer_test.py +0 -0
  19. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/calibrator/__init__.py +0 -0
  20. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/calibrator/calibrator.py +0 -0
  21. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/calibrator/calibrator_router.py +0 -0
  22. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/calibrator/mapie_calibrator.py +0 -0
  23. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/calibrator/vennabers_calibrator.py +0 -0
  24. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/create.py +0 -0
  25. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/exceptions.py +0 -0
  26. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/fit.py +0 -0
  27. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/__init__.py +0 -0
  28. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/catboost_classifier_wrap.py +0 -0
  29. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/catboost_kwargs.py +0 -0
  30. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/catboost_model.py +0 -0
  31. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/catboost_regressor_wrap.py +0 -0
  32. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/model.py +0 -0
  33. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model/model_router.py +0 -0
  34. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/model_type.py +0 -0
  35. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/params.py +0 -0
  36. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/__init__.py +0 -0
  37. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/base_selector_reducer.py +0 -0
  38. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/constant_reducer.py +0 -0
  39. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/correlation_reducer.py +0 -0
  40. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/duplicate_reducer.py +0 -0
  41. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/nonnumeric_reducer.py +0 -0
  42. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/reducer/reducer.py +0 -0
  43. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/selector/__init__.py +0 -0
  44. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/__init__.py +0 -0
  45. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/class_weights.py +0 -0
  46. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/combined_weights.py +0 -0
  47. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/exponential_weights.py +0 -0
  48. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/linear_weights.py +0 -0
  49. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/noop_weights.py +0 -0
  50. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/sigmoid_weights.py +0 -0
  51. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/weights.py +0 -0
  52. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/weights/weights_router.py +0 -0
  53. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/windower/__init__.py +0 -0
  54. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer/windower/windower.py +0 -0
  55. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer.egg-info/dependency_links.txt +0 -0
  56. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer.egg-info/not-zip-safe +0 -0
  57. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/wavetrainer.egg-info/requires.txt +0 -0
  58. {wavetrainer-0.0.14 → wavetrainer-0.0.16}/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.14
3
+ Version: 0.0.16
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.14',
26
+ version='0.0.16',
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.14"
5
+ __VERSION__ = "0.0.16"
6
6
  __all__ = ("create",)
@@ -1,6 +1,7 @@
1
1
  """A reducer that combines all the other reducers."""
2
2
 
3
3
  import json
4
+ import logging
4
5
  import os
5
6
  from typing import Self
6
7
 
@@ -12,6 +13,7 @@ from .correlation_reducer import CorrelationReducer
12
13
  from .duplicate_reducer import DuplicateReducer
13
14
  from .nonnumeric_reducer import NonNumericReducer
14
15
  from .reducer import Reducer
16
+ from .unseen_reducer import UnseenReducer
15
17
 
16
18
  _COMBINED_REDUCER_FILE = "combined_reducer.json"
17
19
  _REDUCERS_KEY = "reducers"
@@ -25,6 +27,7 @@ class CombinedReducer(Reducer):
25
27
  def __init__(self):
26
28
  super().__init__()
27
29
  self._reducers = [
30
+ UnseenReducer(),
28
31
  ConstantReducer(),
29
32
  DuplicateReducer(),
30
33
  NonNumericReducer(),
@@ -54,6 +57,8 @@ class CombinedReducer(Reducer):
54
57
  self._reducers.append(CorrelationReducer())
55
58
  elif reducer_name == NonNumericReducer.name():
56
59
  self._reducers.append(NonNumericReducer())
60
+ elif reducer_name == UnseenReducer.name():
61
+ self._reducers.append(UnseenReducer())
57
62
  for reducer in self._reducers:
58
63
  reducer.load(folder)
59
64
 
@@ -84,5 +89,9 @@ class CombinedReducer(Reducer):
84
89
 
85
90
  def transform(self, df: pd.DataFrame) -> pd.DataFrame:
86
91
  for reducer in self._reducers:
87
- df = reducer.transform(df)
92
+ try:
93
+ df = reducer.transform(df)
94
+ except ValueError as exc:
95
+ logging.warning("Failed to reduce %s", reducer.name())
96
+ raise exc
88
97
  return df
@@ -0,0 +1,58 @@
1
+ """A reducer that removes unseen columns."""
2
+
3
+ import json
4
+ import os
5
+ from typing import Self
6
+
7
+ import optuna
8
+ import pandas as pd
9
+
10
+ from .reducer import Reducer
11
+
12
+ _UNSEEN_REDUCER_FILE = "unseen_reducer.json"
13
+
14
+
15
+ class UnseenReducer(Reducer):
16
+ """A class that removes unseen columns from a dataframe."""
17
+
18
+ # pylint: disable=too-many-positional-arguments,too-many-arguments
19
+
20
+ def __init__(self):
21
+ super().__init__()
22
+ self._seen_features = set()
23
+
24
+ @classmethod
25
+ def name(cls) -> str:
26
+ return "unseen"
27
+
28
+ def set_options(self, trial: optuna.Trial | optuna.trial.FrozenTrial) -> None:
29
+ pass
30
+
31
+ def load(self, folder: str) -> None:
32
+ with open(
33
+ os.path.join(folder, _UNSEEN_REDUCER_FILE), encoding="utf8"
34
+ ) as handle:
35
+ self._seen_features = set(json.load(handle))
36
+
37
+ def save(self, folder: str) -> None:
38
+ with open(
39
+ os.path.join(folder, _UNSEEN_REDUCER_FILE), "w", encoding="utf8"
40
+ ) as handle:
41
+ json.dump(
42
+ list(self._seen_features),
43
+ handle,
44
+ )
45
+
46
+ def fit(
47
+ self,
48
+ df: pd.DataFrame,
49
+ y: pd.Series | pd.DataFrame | None = None,
50
+ w: pd.Series | None = None,
51
+ eval_x: pd.DataFrame | None = None,
52
+ eval_y: pd.Series | pd.DataFrame | None = None,
53
+ ) -> Self:
54
+ self._seen_features = df.columns.values.tolist()
55
+ return self
56
+
57
+ def transform(self, df: pd.DataFrame) -> pd.DataFrame:
58
+ return df[list(self._seen_features)]
@@ -20,7 +20,7 @@ _SELECTOR_FILE = "selector.joblib"
20
20
  class Selector(Params, Fit):
21
21
  """The selector class."""
22
22
 
23
- # pylint: disable=too-many-positional-arguments,too-many-arguments
23
+ # pylint: disable=too-many-positional-arguments,too-many-arguments,consider-using-enumerate
24
24
 
25
25
  _selector: RFE | None
26
26
 
@@ -66,6 +66,14 @@ class Selector(Params, Fit):
66
66
  )
67
67
  try:
68
68
  self._selector.fit(df, y=y, sample_weight=w, **model_kwargs)
69
+ importances = self._model.estimator.feature_importances_
70
+ try:
71
+ importances_len = len(importances)
72
+ columns = self._selector.get_feature_names_out()
73
+ for i in range(importances_len):
74
+ logging.info("Feature %s: %f", columns[i], importances[i])
75
+ except TypeError:
76
+ pass
69
77
  except ValueError as exc:
70
78
  # Catch issues with 1 feature as a reduction target.
71
79
  logging.warning(str(exc))
@@ -317,7 +317,7 @@ class Trainer(Fit):
317
317
 
318
318
  last_processed_dt = None
319
319
  for count, test_idx in tqdm.tqdm(
320
- enumerate(test_dt_index[test_dt_index >= start_test_index])
320
+ enumerate(dt_index[dt_index >= start_test_index])
321
321
  ):
322
322
  if (
323
323
  last_processed_dt is not None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wavetrainer
3
- Version: 0.0.14
3
+ Version: 0.0.16
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
@@ -40,6 +40,7 @@ wavetrainer/reducer/correlation_reducer.py
40
40
  wavetrainer/reducer/duplicate_reducer.py
41
41
  wavetrainer/reducer/nonnumeric_reducer.py
42
42
  wavetrainer/reducer/reducer.py
43
+ wavetrainer/reducer/unseen_reducer.py
43
44
  wavetrainer/selector/__init__.py
44
45
  wavetrainer/selector/selector.py
45
46
  wavetrainer/weights/__init__.py
File without changes
File without changes
File without changes
File without changes