lecrapaud 0.18.9__py3-none-any.whl → 0.19.0__py3-none-any.whl
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.
- lecrapaud/db/alembic/versions/2025_08_28_1516-c36e9fee22b9_add_avg_precision_to_score.py +34 -0
- lecrapaud/db/alembic/versions/2025_08_28_1622-8b11c1ba982e_change_name_column.py +44 -0
- lecrapaud/db/models/experiment.py +1 -1
- lecrapaud/db/models/score.py +1 -0
- lecrapaud/db/session.py +1 -1
- lecrapaud/model_selection.py +120 -14
- lecrapaud/search_space.py +36 -0
- {lecrapaud-0.18.9.dist-info → lecrapaud-0.19.0.dist-info}/METADATA +2 -1
- {lecrapaud-0.18.9.dist-info → lecrapaud-0.19.0.dist-info}/RECORD +11 -9
- {lecrapaud-0.18.9.dist-info → lecrapaud-0.19.0.dist-info}/LICENSE +0 -0
- {lecrapaud-0.18.9.dist-info → lecrapaud-0.19.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""add avg precision to score
|
|
2
|
+
|
|
3
|
+
Revision ID: c36e9fee22b9
|
|
4
|
+
Revises: 7ed9963e732f
|
|
5
|
+
Create Date: 2025-08-28 15:16:34.657593
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Sequence, Union
|
|
10
|
+
|
|
11
|
+
from alembic import op
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from lecrapaud.config import LECRAPAUD_TABLE_PREFIX
|
|
14
|
+
|
|
15
|
+
# revision identifiers, used by Alembic.
|
|
16
|
+
revision: str = "c36e9fee22b9"
|
|
17
|
+
down_revision: Union[str, None] = "7ed9963e732f"
|
|
18
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
19
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def upgrade() -> None:
|
|
23
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
24
|
+
op.add_column(
|
|
25
|
+
f"{LECRAPAUD_TABLE_PREFIX}_scores",
|
|
26
|
+
sa.Column("avg_precision", sa.Float(), nullable=True),
|
|
27
|
+
)
|
|
28
|
+
# ### end Alembic commands ###
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def downgrade() -> None:
|
|
32
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
33
|
+
op.drop_column(f"{LECRAPAUD_TABLE_PREFIX}_scores", "avg_precision")
|
|
34
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""change name column
|
|
2
|
+
|
|
3
|
+
Revision ID: 8b11c1ba982e
|
|
4
|
+
Revises: c36e9fee22b9
|
|
5
|
+
Create Date: 2025-08-28 16:22:45.528296
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Sequence, Union
|
|
10
|
+
|
|
11
|
+
from alembic import op
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from sqlalchemy.dialects import mysql
|
|
14
|
+
from lecrapaud.config import LECRAPAUD_TABLE_PREFIX
|
|
15
|
+
|
|
16
|
+
# revision identifiers, used by Alembic.
|
|
17
|
+
revision: str = "8b11c1ba982e"
|
|
18
|
+
down_revision: Union[str, None] = "c36e9fee22b9"
|
|
19
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def upgrade() -> None:
|
|
24
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
25
|
+
op.alter_column(
|
|
26
|
+
f"{LECRAPAUD_TABLE_PREFIX}_experiments",
|
|
27
|
+
"name",
|
|
28
|
+
existing_type=mysql.VARCHAR(length=50),
|
|
29
|
+
type_=sa.String(length=255),
|
|
30
|
+
existing_nullable=False,
|
|
31
|
+
)
|
|
32
|
+
# ### end Alembic commands ###
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def downgrade() -> None:
|
|
36
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
37
|
+
op.alter_column(
|
|
38
|
+
f"{LECRAPAUD_TABLE_PREFIX}_experiments",
|
|
39
|
+
"name",
|
|
40
|
+
existing_type=sa.String(length=255),
|
|
41
|
+
type_=mysql.VARCHAR(length=50),
|
|
42
|
+
existing_nullable=False,
|
|
43
|
+
)
|
|
44
|
+
# ### end Alembic commands ###
|
|
@@ -49,7 +49,7 @@ class Experiment(Base):
|
|
|
49
49
|
onupdate=func.now(),
|
|
50
50
|
nullable=False,
|
|
51
51
|
)
|
|
52
|
-
name = Column(String(
|
|
52
|
+
name = Column(String(255), nullable=False)
|
|
53
53
|
path = Column(String(255)) # we do not have this at creation time
|
|
54
54
|
type = Column(String(50), nullable=False)
|
|
55
55
|
size = Column(Integer, nullable=False)
|
lecrapaud/db/models/score.py
CHANGED
lecrapaud/db/session.py
CHANGED
|
@@ -12,6 +12,7 @@ from lecrapaud.config import DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME, DB
|
|
|
12
12
|
|
|
13
13
|
_engine = None
|
|
14
14
|
_SessionLocal = None
|
|
15
|
+
|
|
15
16
|
if DB_URI:
|
|
16
17
|
if "mysql://" in DB_URI and "pymysql://" not in DB_URI:
|
|
17
18
|
DB_URI = DB_URI.replace("mysql://", "mysql+pymysql://")
|
|
@@ -72,7 +73,6 @@ def init_db(uri: str = None):
|
|
|
72
73
|
autocommit=False,
|
|
73
74
|
autoflush=False,
|
|
74
75
|
bind=_engine,
|
|
75
|
-
expire_on_commit=False, # Don't expire objects on commit
|
|
76
76
|
)
|
|
77
77
|
|
|
78
78
|
# Step 5: Apply Alembic migrations programmatically
|
lecrapaud/model_selection.py
CHANGED
|
@@ -14,8 +14,6 @@ import pickle
|
|
|
14
14
|
from pydantic import BaseModel
|
|
15
15
|
import ast
|
|
16
16
|
|
|
17
|
-
os.environ["COVERAGE_FILE"] = str(Path(".coverage").resolve())
|
|
18
|
-
|
|
19
17
|
# ML models
|
|
20
18
|
from sklearn.model_selection import TimeSeriesSplit
|
|
21
19
|
from sklearn.calibration import CalibratedClassifierCV
|
|
@@ -80,6 +78,8 @@ from lecrapaud.db import (
|
|
|
80
78
|
Experiment,
|
|
81
79
|
)
|
|
82
80
|
|
|
81
|
+
os.environ["COVERAGE_FILE"] = str(Path(".coverage").resolve())
|
|
82
|
+
|
|
83
83
|
# Reproducible result
|
|
84
84
|
keras.utils.set_random_seed(42)
|
|
85
85
|
np.random.seed(42)
|
|
@@ -157,8 +157,10 @@ class ModelEngine:
|
|
|
157
157
|
def fit(self, *args):
|
|
158
158
|
if self.recurrent:
|
|
159
159
|
fit = self.fit_recurrent
|
|
160
|
-
elif (self.
|
|
160
|
+
elif (self.model_name == "lgb") or (self.model_name == "xgb"):
|
|
161
161
|
fit = self.fit_boosting
|
|
162
|
+
elif self.model_name == "catboost":
|
|
163
|
+
fit = self.fit_catboost
|
|
162
164
|
else:
|
|
163
165
|
fit = self.fit_sklearn
|
|
164
166
|
model = fit(*args)
|
|
@@ -201,17 +203,110 @@ class ModelEngine:
|
|
|
201
203
|
|
|
202
204
|
return model
|
|
203
205
|
|
|
204
|
-
def
|
|
206
|
+
def fit_catboost(self, x_train, y_train, x_val, y_val, params):
|
|
205
207
|
"""
|
|
206
|
-
|
|
208
|
+
Train CatBoost models with native early stopping and log metrics to TensorBoard.
|
|
209
|
+
Also supports plotting of the primary eval metric if self.plot is True.
|
|
207
210
|
"""
|
|
208
|
-
|
|
211
|
+
# Prepare constructor parameters
|
|
212
|
+
ctor_params = dict(params) if params else {}
|
|
213
|
+
early_stopping_rounds = ctor_params.pop("early_stopping_rounds", None)
|
|
214
|
+
# Alias support: num_boost_round -> iterations
|
|
215
|
+
num_boost_round = ctor_params.pop("num_boost_round", None)
|
|
216
|
+
if num_boost_round is not None and "iterations" not in ctor_params:
|
|
217
|
+
ctor_params["iterations"] = num_boost_round
|
|
218
|
+
|
|
219
|
+
# Determine classification/regression setup
|
|
220
|
+
labels = np.unique(y_train)
|
|
221
|
+
num_class = (
|
|
222
|
+
labels.size
|
|
223
|
+
if self.target_type == "classification" and labels.size > 2
|
|
224
|
+
else 1
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
if self.target_type == "regression":
|
|
228
|
+
ctor_params.setdefault("loss_function", "RMSE")
|
|
229
|
+
eval_metric = ctor_params.get("eval_metric", "RMSE")
|
|
230
|
+
else:
|
|
231
|
+
if num_class <= 2:
|
|
232
|
+
ctor_params.setdefault("loss_function", "Logloss")
|
|
233
|
+
eval_metric = ctor_params.get("eval_metric", "Logloss")
|
|
234
|
+
else:
|
|
235
|
+
ctor_params.setdefault("loss_function", "MultiClass")
|
|
236
|
+
eval_metric = ctor_params.get("eval_metric", "MultiClass")
|
|
237
|
+
ctor_params.setdefault("eval_metric", eval_metric)
|
|
238
|
+
|
|
239
|
+
# Instantiate CatBoost model from provided constructor
|
|
240
|
+
model = self.create_model(**ctor_params, allow_writing_files=False)
|
|
241
|
+
|
|
242
|
+
# Train with eval_set and early stopping
|
|
243
|
+
logger.info(f"Fitting the model {self.model_name}...")
|
|
244
|
+
logger.info(f"x_train shape: {x_train.shape}, x_val shape: {x_val.shape}")
|
|
245
|
+
logger.info(f"y_train shape: {y_train.shape}, y_val shape: {y_val.shape}")
|
|
246
|
+
|
|
247
|
+
model.fit(
|
|
248
|
+
x_train,
|
|
249
|
+
y_train,
|
|
250
|
+
eval_set=[(x_val, y_val)],
|
|
251
|
+
use_best_model=True,
|
|
252
|
+
early_stopping_rounds=early_stopping_rounds,
|
|
253
|
+
verbose=False,
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
# Retrieve evaluation results
|
|
257
|
+
evals_result = model.get_evals_result()
|
|
258
|
+
# CatBoost commonly uses 'learn' and 'validation' (or 'validation_0')
|
|
259
|
+
learn_key = "learn"
|
|
260
|
+
val_key = None
|
|
261
|
+
for k in evals_result.keys():
|
|
262
|
+
if k != learn_key:
|
|
263
|
+
val_key = k
|
|
264
|
+
break
|
|
265
|
+
|
|
266
|
+
# Ensure eval_metric exists; otherwise fallback to first available metric
|
|
267
|
+
if eval_metric not in evals_result.get(learn_key, {}):
|
|
268
|
+
if evals_result.get(learn_key):
|
|
269
|
+
eval_metric = next(iter(evals_result[learn_key].keys()))
|
|
270
|
+
|
|
271
|
+
# TensorBoard logging
|
|
272
|
+
writer = SummaryWriter(self.log_dir)
|
|
273
|
+
try:
|
|
274
|
+
# learn_scores = evals_result.get(learn_key, {}).get(eval_metric, [])
|
|
275
|
+
val_scores = (
|
|
276
|
+
evals_result.get(val_key, {}).get(eval_metric, []) if val_key else []
|
|
277
|
+
)
|
|
278
|
+
# for i, v in enumerate(learn_scores):
|
|
279
|
+
# writer.add_scalar(f"CatBoost/train/{eval_metric}", v, i)
|
|
280
|
+
for i, v in enumerate(val_scores):
|
|
281
|
+
writer.add_scalar(f"CatBoost/{eval_metric}", v, i)
|
|
282
|
+
finally:
|
|
283
|
+
writer.close()
|
|
284
|
+
|
|
285
|
+
# Optional plotting of training progress
|
|
286
|
+
if self.plot and eval_metric and learn_key in evals_result and val_key:
|
|
287
|
+
logs = {
|
|
288
|
+
"train": evals_result[learn_key].get(eval_metric, []),
|
|
289
|
+
"val": evals_result[val_key].get(eval_metric, []),
|
|
290
|
+
}
|
|
291
|
+
plot_training_progress(
|
|
292
|
+
logs=logs,
|
|
293
|
+
model_name=self.model_name,
|
|
294
|
+
target_number=self.target_number,
|
|
295
|
+
title_suffix=f"Training Progress - {eval_metric}",
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
# Attach metadata for consistency with sklearn path
|
|
299
|
+
model.model_name = self.model_name
|
|
300
|
+
model.target_type = self.target_type
|
|
301
|
+
logger.info(f"Successfully created a {model.model_name} at {datetime.now()}")
|
|
209
302
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
train_data = boosting_dataset(x_train, label=y_train)
|
|
213
|
-
val_data = boosting_dataset(x_val, label=y_val)
|
|
303
|
+
self._model = model
|
|
304
|
+
return model
|
|
214
305
|
|
|
306
|
+
def fit_boosting(self, x_train, y_train, x_val, y_val, params):
|
|
307
|
+
"""
|
|
308
|
+
This is using lightGBM or XGboost C++ librairies
|
|
309
|
+
"""
|
|
215
310
|
# Create a TensorBoardX writer
|
|
216
311
|
writer = SummaryWriter(self.log_dir)
|
|
217
312
|
evals_result = {}
|
|
@@ -223,11 +318,13 @@ class ModelEngine:
|
|
|
223
318
|
if self.target_type == "classification" and labels.size > 2
|
|
224
319
|
else 1
|
|
225
320
|
)
|
|
226
|
-
logger.info("Fitting the model...")
|
|
321
|
+
logger.info(f"Fitting the model {self.model_name}...")
|
|
227
322
|
logger.info(f"x_train shape: {x_train.shape}, x_val shape: {x_val.shape}")
|
|
228
323
|
logger.info(f"y_train shape: {y_train.shape}, y_val shape: {y_val.shape}")
|
|
229
324
|
|
|
230
|
-
if
|
|
325
|
+
if self.model_name == "lgb":
|
|
326
|
+
train_data = lgb.Dataset(x_train, label=y_train)
|
|
327
|
+
val_data = lgb.Dataset(x_val, label=y_val)
|
|
231
328
|
|
|
232
329
|
def tensorboard_callback(env):
|
|
233
330
|
for i, metric in enumerate(env.evaluation_result_list):
|
|
@@ -252,18 +349,23 @@ class ModelEngine:
|
|
|
252
349
|
"objective": loss,
|
|
253
350
|
"metric": eval_metric,
|
|
254
351
|
"num_class": num_class,
|
|
352
|
+
"verbose": -1,
|
|
255
353
|
},
|
|
256
354
|
num_boost_round=params["num_boost_round"],
|
|
257
355
|
train_set=train_data,
|
|
258
356
|
valid_sets=[train_data, val_data],
|
|
259
357
|
valid_names=["train", "val"],
|
|
260
358
|
callbacks=[
|
|
261
|
-
lgb.early_stopping(
|
|
359
|
+
lgb.early_stopping(
|
|
360
|
+
stopping_rounds=params["early_stopping_rounds"], verbose=False
|
|
361
|
+
),
|
|
262
362
|
lgb.record_evaluation(evals_result),
|
|
263
363
|
tensorboard_callback,
|
|
264
364
|
],
|
|
265
365
|
)
|
|
266
366
|
else:
|
|
367
|
+
train_data = xgb.DMatrix(x_train, label=y_train)
|
|
368
|
+
val_data = xgb.DMatrix(x_val, label=y_val)
|
|
267
369
|
|
|
268
370
|
class TensorBoardCallback(xgb.callback.TrainingCallback):
|
|
269
371
|
|
|
@@ -300,6 +402,7 @@ class ModelEngine:
|
|
|
300
402
|
if self.target_type == "regression"
|
|
301
403
|
else ("logloss" if num_class <= 2 else "mlogloss")
|
|
302
404
|
)
|
|
405
|
+
xgb.set_config(verbosity=0)
|
|
303
406
|
model = xgb.train(
|
|
304
407
|
params={
|
|
305
408
|
**params["model_params"],
|
|
@@ -318,7 +421,7 @@ class ModelEngine:
|
|
|
318
421
|
tensorboard_callback,
|
|
319
422
|
],
|
|
320
423
|
evals_result=evals_result, # Record evaluation result
|
|
321
|
-
verbose_eval=
|
|
424
|
+
verbose_eval=10000,
|
|
322
425
|
)
|
|
323
426
|
|
|
324
427
|
model.model_name = self.create_model
|
|
@@ -1365,6 +1468,9 @@ def evaluate(
|
|
|
1365
1468
|
average=("binary" if num_classes == 2 else "macro"),
|
|
1366
1469
|
)
|
|
1367
1470
|
score["ROC_AUC"] = float(roc_auc_score(y_true, y_pred_proba, multi_class="ovr"))
|
|
1471
|
+
score["AVG_PRECISION"] = average_precision_score(
|
|
1472
|
+
y_true, y_pred_proba, average="macro"
|
|
1473
|
+
)
|
|
1368
1474
|
|
|
1369
1475
|
# Store the complete thresholds dictionary
|
|
1370
1476
|
if len(target_clf_thresholds.keys()) > 1:
|
lecrapaud/search_space.py
CHANGED
|
@@ -15,6 +15,7 @@ from sklearn.naive_bayes import GaussianNB
|
|
|
15
15
|
# Ensemble models
|
|
16
16
|
from lightgbm import LGBMRegressor, LGBMClassifier
|
|
17
17
|
from xgboost import XGBRegressor, XGBClassifier
|
|
18
|
+
from catboost import CatBoostRegressor, CatBoostClassifier
|
|
18
19
|
from sklearn.ensemble import (
|
|
19
20
|
RandomForestRegressor,
|
|
20
21
|
AdaBoostRegressor,
|
|
@@ -464,6 +465,41 @@ ml_models = [
|
|
|
464
465
|
},
|
|
465
466
|
},
|
|
466
467
|
},
|
|
468
|
+
{
|
|
469
|
+
"model_name": "catboost",
|
|
470
|
+
"recurrent": False,
|
|
471
|
+
"need_scaling": False,
|
|
472
|
+
"classification": {
|
|
473
|
+
"create_model": CatBoostClassifier,
|
|
474
|
+
"search_params": {
|
|
475
|
+
"iterations": tune.randint(50, 1000),
|
|
476
|
+
"num_boost_round": tune.randint(50, 1000),
|
|
477
|
+
"early_stopping_rounds": tune.randint(5, 50),
|
|
478
|
+
"learning_rate": tune.loguniform(1e-4, 0.5),
|
|
479
|
+
"depth": tune.randint(3, 10),
|
|
480
|
+
"l2_leaf_reg": tune.loguniform(1e-5, 10),
|
|
481
|
+
"bagging_temperature": tune.uniform(0.0, 1.0),
|
|
482
|
+
"rsm": tune.quniform(0.6, 1.0, 0.05),
|
|
483
|
+
"random_state": 42,
|
|
484
|
+
"verbose": False,
|
|
485
|
+
},
|
|
486
|
+
},
|
|
487
|
+
"regression": {
|
|
488
|
+
"create_model": CatBoostRegressor,
|
|
489
|
+
"search_params": {
|
|
490
|
+
"iterations": tune.randint(50, 1000),
|
|
491
|
+
"num_boost_round": tune.randint(50, 1000),
|
|
492
|
+
"early_stopping_rounds": tune.randint(5, 50),
|
|
493
|
+
"learning_rate": tune.loguniform(1e-4, 0.5),
|
|
494
|
+
"depth": tune.randint(3, 10),
|
|
495
|
+
"l2_leaf_reg": tune.loguniform(1e-5, 10),
|
|
496
|
+
"bagging_temperature": tune.uniform(0.0, 1.0),
|
|
497
|
+
"rsm": tune.quniform(0.6, 1.0, 0.05),
|
|
498
|
+
"random_state": 42,
|
|
499
|
+
"verbose": False,
|
|
500
|
+
},
|
|
501
|
+
},
|
|
502
|
+
},
|
|
467
503
|
]
|
|
468
504
|
|
|
469
505
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: lecrapaud
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.19.0
|
|
4
4
|
Summary: Framework for machine and deep learning, with regression, classification and time series analysis
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Pierre H. Gallet
|
|
@@ -8,6 +8,7 @@ Requires-Python: ==3.12.*
|
|
|
8
8
|
Classifier: License :: Other/Proprietary License
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Requires-Dist: catboost (>=1.2.8)
|
|
11
12
|
Requires-Dist: category-encoders (>=2.8.1)
|
|
12
13
|
Requires-Dist: celery (>=5.5.3)
|
|
13
14
|
Requires-Dist: ftfy (>=6.3.1)
|
|
@@ -10,20 +10,22 @@ lecrapaud/db/alembic/versions/2025_06_24_1216-c62251b129ed_.py,sha256=6Pf36HAXEV
|
|
|
10
10
|
lecrapaud/db/alembic/versions/2025_06_24_1711-86457e2f333f_.py,sha256=KjwjYvFaNqYmBLTYel8As37fyaBtNVWTqN_3M7y_2eI,1357
|
|
11
11
|
lecrapaud/db/alembic/versions/2025_06_25_1759-72aa496ca65b_.py,sha256=MiqooJuZ1etExl2he3MniaEv8G0LrmqY-0m22m9xKmc,943
|
|
12
12
|
lecrapaud/db/alembic/versions/2025_08_25_1434-7ed9963e732f_add_best_score_to_model_selection.py,sha256=gyQDFFHp1dlILuDtXSPdUU_MsLlX-UzTP-E96Aj_Hto,966
|
|
13
|
+
lecrapaud/db/alembic/versions/2025_08_28_1516-c36e9fee22b9_add_avg_precision_to_score.py,sha256=Bpi1zegNGX1qU-8RVzRfwjyv2cVaQ5P9cpKQ1QDJgxs,945
|
|
14
|
+
lecrapaud/db/alembic/versions/2025_08_28_1622-8b11c1ba982e_change_name_column.py,sha256=g6H2Z9MwB6UEiqdGlBoHBXpO9DTaWkwHt8FS6joVOm0,1191
|
|
13
15
|
lecrapaud/db/alembic.ini,sha256=Zw2rdwsKV6c7J1SPtoFIPDX08_oTP3MuUKnNxBDiY8I,3796
|
|
14
16
|
lecrapaud/db/models/__init__.py,sha256=Lhyw9fVLdom0Fc6yIP-ip8FjkU1EwVwjae5q2VM815Q,740
|
|
15
17
|
lecrapaud/db/models/base.py,sha256=Sc6g38LsNsjn9-qpWOMSsZlbUER0Xr56-yLIJLpTMDU,7808
|
|
16
|
-
lecrapaud/db/models/experiment.py,sha256=
|
|
18
|
+
lecrapaud/db/models/experiment.py,sha256=HlaHnAdjTRo9q87FUWq83YlKw5vB_o1sULxUQdmuCvo,14869
|
|
17
19
|
lecrapaud/db/models/feature.py,sha256=5o77O2FyRObnLOCGNj8kaPSGM3pLv1Ov6mXXHYkmnYY,1136
|
|
18
20
|
lecrapaud/db/models/feature_selection.py,sha256=mk42xuw1Sm_7Pznfg7TNc5_S4hscdw79QgIe3Bt9ZRI,3245
|
|
19
21
|
lecrapaud/db/models/feature_selection_rank.py,sha256=Ydsb_rAT58FoSH13wkGjGPByzsjPx3DITXgJ2jgZmow,2198
|
|
20
22
|
lecrapaud/db/models/model.py,sha256=F0hyMjd4FFHCv6_arIWBEmBCGOfG3b6_uzU8ExtFE90,952
|
|
21
23
|
lecrapaud/db/models/model_selection.py,sha256=tJuICcporf3TxQHbJbHxnKgkaVc02z2kJJoCYS2nDcw,2001
|
|
22
24
|
lecrapaud/db/models/model_training.py,sha256=jAIYPdwBln2jf593soLQ730uYrTfNK8zdG8TesOqmh0,1698
|
|
23
|
-
lecrapaud/db/models/score.py,sha256=
|
|
25
|
+
lecrapaud/db/models/score.py,sha256=oo9-IAP8iRgrQYe39W_T1nW4zA_E3cLuTnFaDPAAK1A,1703
|
|
24
26
|
lecrapaud/db/models/target.py,sha256=DKnfeaLU8eT8J_oh_vuFo5-o1CaoXR13xBbswme6Bgk,1649
|
|
25
27
|
lecrapaud/db/models/utils.py,sha256=-a-nWWmpJ2XzidIxo2COVUTrGZIPYCfBzjhcszJj_bM,1109
|
|
26
|
-
lecrapaud/db/session.py,sha256=
|
|
28
|
+
lecrapaud/db/session.py,sha256=87W5AkGRYu8b2rF5FNQ0MFC6wtGc-gGagNJQN_0vnDQ,3667
|
|
27
29
|
lecrapaud/directories.py,sha256=0LrANuDgbuneSLker60c6q2hmGnQ3mKHIztTGzTx6Gw,826
|
|
28
30
|
lecrapaud/experiment.py,sha256=1xLWjOrqAxJh9CdXOx9ppQuRFRRj0GH-xYZqg-ty9hI,2463
|
|
29
31
|
lecrapaud/feature_engineering.py,sha256=ib1afBrwqePiXUaw0Cpe6hY3VNl5afg8YVntb88SCT4,39199
|
|
@@ -37,10 +39,10 @@ lecrapaud/misc/tabpfn_tests.ipynb,sha256=VkgsCUJ30d8jaL2VaWtQAgb8ngHPNtPgnXLs7QQ
|
|
|
37
39
|
lecrapaud/misc/test-gpu-bilstm.ipynb,sha256=4nLuZRJVe2kn6kEmauhRiz5wkWT9AVrYhI9CEk_dYUY,9608
|
|
38
40
|
lecrapaud/misc/test-gpu-resnet.ipynb,sha256=27Vu7nYwujYeh3fOxBNCnKJn3MXNPKZU-U8oDDUbymg,4944
|
|
39
41
|
lecrapaud/misc/test-gpu-transformers.ipynb,sha256=k6MBSs_Um1h4PykvE-LTBcdpbWLbIFST_xl_AFW2jgI,8444
|
|
40
|
-
lecrapaud/model_selection.py,sha256=
|
|
41
|
-
lecrapaud/search_space.py,sha256
|
|
42
|
+
lecrapaud/model_selection.py,sha256=z6sMU6ZGaymZOWdJehPw4yaWdzcYTABWweyH5LvCJwk,76980
|
|
43
|
+
lecrapaud/search_space.py,sha256=FCIEHZBK1pUQ4CphJuxwXY2N_BdrCelRzHsCXnNLlVI,36334
|
|
42
44
|
lecrapaud/utils.py,sha256=ATKu9pbXjYFRa2YzBYjqyLHJrzfnZ7SJrOD_qAnEBYE,8242
|
|
43
|
-
lecrapaud-0.
|
|
44
|
-
lecrapaud-0.
|
|
45
|
-
lecrapaud-0.
|
|
46
|
-
lecrapaud-0.
|
|
45
|
+
lecrapaud-0.19.0.dist-info/LICENSE,sha256=MImCryu0AnqhJE_uAZD-PIDKXDKb8sT7v0i1NOYeHTM,11350
|
|
46
|
+
lecrapaud-0.19.0.dist-info/METADATA,sha256=VdLOpM5P_sI6pe2UBIcBwcrA8870ZBWUUmjBbZINQbI,11115
|
|
47
|
+
lecrapaud-0.19.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
48
|
+
lecrapaud-0.19.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|