wavetrainer 0.0.3__tar.gz → 0.0.4__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.
- {wavetrainer-0.0.3/wavetrainer.egg-info → wavetrainer-0.0.4}/PKG-INFO +1 -1
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/setup.py +1 -1
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/__init__.py +1 -1
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/combined_reducer.py +10 -2
- wavetrainer-0.0.4/wavetrainer/reducer/nonnumeric_reducer.py +39 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/trainer.py +4 -2
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/class_weights.py +1 -1
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/windower/windower.py +5 -2
- {wavetrainer-0.0.3 → wavetrainer-0.0.4/wavetrainer.egg-info}/PKG-INFO +1 -1
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer.egg-info/SOURCES.txt +1 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/LICENSE +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/MANIFEST.in +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/README.md +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/requirements.txt +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/setup.cfg +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/tests/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/tests/trainer_test.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/calibrator/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/calibrator/calibrator.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/calibrator/calibrator_router.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/calibrator/mapie_calibrator.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/calibrator/vennabers_calibrator.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/create.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/exceptions.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/fit.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/load.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/model/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/model/catboost_model.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/model/model.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/model/model_router.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/model_type.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/params.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/base_selector_reducer.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/constant_reducer.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/correlation_reducer.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/duplicate_reducer.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/reducer/reducer.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/selector/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/selector/selector.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/combined_weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/exponential_weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/linear_weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/noop_weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/sigmoid_weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/weights.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/weights/weights_router.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer/windower/__init__.py +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer.egg-info/dependency_links.txt +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer.egg-info/not-zip-safe +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer.egg-info/requires.txt +0 -0
- {wavetrainer-0.0.3 → wavetrainer-0.0.4}/wavetrainer.egg-info/top_level.txt +0 -0
@@ -23,7 +23,7 @@ def install_requires() -> typing.List[str]:
|
|
23
23
|
|
24
24
|
setup(
|
25
25
|
name='wavetrainer',
|
26
|
-
version='0.0.
|
26
|
+
version='0.0.4',
|
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',
|
@@ -10,6 +10,7 @@ import pandas as pd
|
|
10
10
|
from .constant_reducer import ConstantReducer
|
11
11
|
from .correlation_reducer import CorrelationReducer
|
12
12
|
from .duplicate_reducer import DuplicateReducer
|
13
|
+
from .nonnumeric_reducer import NonNumericReducer
|
13
14
|
from .reducer import Reducer
|
14
15
|
|
15
16
|
_COMBINED_REDUCER_FILE = "combined_reducer.json"
|
@@ -21,7 +22,12 @@ class CombinedReducer(Reducer):
|
|
21
22
|
|
22
23
|
def __init__(self):
|
23
24
|
super().__init__()
|
24
|
-
self._reducers = [
|
25
|
+
self._reducers = [
|
26
|
+
ConstantReducer(),
|
27
|
+
DuplicateReducer(),
|
28
|
+
CorrelationReducer(),
|
29
|
+
NonNumericReducer(),
|
30
|
+
]
|
25
31
|
|
26
32
|
@classmethod
|
27
33
|
def name(cls) -> str:
|
@@ -44,6 +50,8 @@ class CombinedReducer(Reducer):
|
|
44
50
|
self._reducers.append(DuplicateReducer())
|
45
51
|
elif reducer_name == CorrelationReducer.name():
|
46
52
|
self._reducers.append(CorrelationReducer())
|
53
|
+
elif reducer_name == NonNumericReducer.name():
|
54
|
+
self._reducers.append(NonNumericReducer())
|
47
55
|
for reducer in self._reducers:
|
48
56
|
reducer.load(folder)
|
49
57
|
|
@@ -67,7 +75,7 @@ class CombinedReducer(Reducer):
|
|
67
75
|
w: pd.Series | None = None,
|
68
76
|
) -> Self:
|
69
77
|
for reducer in self._reducers:
|
70
|
-
reducer.
|
78
|
+
df = reducer.fit_transform(df)
|
71
79
|
return self
|
72
80
|
|
73
81
|
def transform(self, df: pd.DataFrame) -> pd.DataFrame:
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"""A reducer that removes non-numeric columns."""
|
2
|
+
|
3
|
+
from typing import Self
|
4
|
+
|
5
|
+
import optuna
|
6
|
+
import pandas as pd
|
7
|
+
|
8
|
+
from .reducer import Reducer
|
9
|
+
|
10
|
+
|
11
|
+
class NonNumericReducer(Reducer):
|
12
|
+
"""A class that removes non numeric columns from a dataframe."""
|
13
|
+
|
14
|
+
@classmethod
|
15
|
+
def name(cls) -> str:
|
16
|
+
return "nonnumeric"
|
17
|
+
|
18
|
+
def set_options(self, trial: optuna.Trial | optuna.trial.FrozenTrial) -> None:
|
19
|
+
pass
|
20
|
+
|
21
|
+
def load(self, folder: str) -> None:
|
22
|
+
pass
|
23
|
+
|
24
|
+
def save(self, folder: str) -> None:
|
25
|
+
pass
|
26
|
+
|
27
|
+
def fit(
|
28
|
+
self,
|
29
|
+
df: pd.DataFrame,
|
30
|
+
y: pd.Series | pd.DataFrame | None = None,
|
31
|
+
w: pd.Series | None = None,
|
32
|
+
) -> Self:
|
33
|
+
return self
|
34
|
+
|
35
|
+
def transform(self, df: pd.DataFrame) -> pd.DataFrame:
|
36
|
+
categorical_cols = df.select_dtypes(include="category").columns.tolist()
|
37
|
+
numeric_cols = df.select_dtypes(include="number").columns.tolist()
|
38
|
+
keep_cols = categorical_cols + numeric_cols
|
39
|
+
return df[keep_cols]
|
@@ -252,14 +252,16 @@ class Trainer(Fit):
|
|
252
252
|
start_validation_index = (
|
253
253
|
dt_index[-int(len(dt_index) * self._validation_size) - 1]
|
254
254
|
if isinstance(self._validation_size, float)
|
255
|
-
else dt_index[
|
255
|
+
else dt_index[
|
256
|
+
dt_index >= (dt_index.to_list()[-1] - self._validation_size)
|
257
|
+
].to_list()[0]
|
256
258
|
)
|
257
259
|
test_df = df[dt_index < start_validation_index]
|
258
260
|
test_dt_index = (
|
259
261
|
test_df.index if self._dt_column is None else test_df[self._dt_column]
|
260
262
|
)
|
261
263
|
start_test_index = (
|
262
|
-
test_dt_index[-int(len(test_dt_index) * self._test_size)]
|
264
|
+
test_dt_index.to_list()[-int(len(test_dt_index) * self._test_size)]
|
263
265
|
if isinstance(self._test_size, float)
|
264
266
|
else test_dt_index[test_dt_index >= self._test_size][0]
|
265
267
|
)
|
@@ -47,7 +47,7 @@ class ClassWeights(Weights):
|
|
47
47
|
self._class_weights = {}
|
48
48
|
return self
|
49
49
|
|
50
|
-
arr =
|
50
|
+
arr = y.astype(int).to_numpy().flatten().astype(float)
|
51
51
|
unique_vals = np.unique(arr)
|
52
52
|
w_arr = compute_class_weight(
|
53
53
|
class_weight="balanced", classes=unique_vals, y=arr
|
@@ -52,7 +52,9 @@ class Windower(Params, Fit):
|
|
52
52
|
lookback_ratio = self._lookback_ratio
|
53
53
|
if lookback_ratio is None:
|
54
54
|
raise ValueError("lookback_ratio is null")
|
55
|
-
dt_index =
|
55
|
+
dt_index = (
|
56
|
+
df.index if self._dt_column is None else df[self._dt_column].to_list()
|
57
|
+
)
|
56
58
|
start_idx = dt_index[int(len(df) * lookback_ratio)]
|
57
59
|
end_idx = dt_index[-1]
|
58
60
|
td = end_idx.to_pydatetime() - start_idx.to_pydatetime()
|
@@ -66,5 +68,6 @@ class Windower(Params, Fit):
|
|
66
68
|
dt_index = df.index if self._dt_column is None else df[self._dt_column]
|
67
69
|
return df[
|
68
70
|
dt_index
|
69
|
-
>= dt_index[-1].to_pydatetime()
|
71
|
+
>= dt_index.to_list()[-1].to_pydatetime()
|
72
|
+
- datetime.timedelta(seconds=lookback)
|
70
73
|
]
|
@@ -34,6 +34,7 @@ wavetrainer/reducer/combined_reducer.py
|
|
34
34
|
wavetrainer/reducer/constant_reducer.py
|
35
35
|
wavetrainer/reducer/correlation_reducer.py
|
36
36
|
wavetrainer/reducer/duplicate_reducer.py
|
37
|
+
wavetrainer/reducer/nonnumeric_reducer.py
|
37
38
|
wavetrainer/reducer/reducer.py
|
38
39
|
wavetrainer/selector/__init__.py
|
39
40
|
wavetrainer/selector/selector.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|