dragon-ml-toolbox 10.6.0__py3-none-any.whl → 10.7.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.

Potentially problematic release.


This version of dragon-ml-toolbox might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dragon-ml-toolbox
3
- Version: 10.6.0
3
+ Version: 10.7.0
4
4
  Summary: A collection of tools for data science and machine learning projects.
5
5
  Author-email: Karl Loza <luigiloza@gmail.com>
6
6
  License-Expression: MIT
@@ -1,18 +1,18 @@
1
- dragon_ml_toolbox-10.6.0.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
- dragon_ml_toolbox-10.6.0.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=lY4_rJPnLnMu7YBQaY-_iz1JRDcLdQzNCyeLAF1glJY,1837
1
+ dragon_ml_toolbox-10.7.0.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
+ dragon_ml_toolbox-10.7.0.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=lY4_rJPnLnMu7YBQaY-_iz1JRDcLdQzNCyeLAF1glJY,1837
3
3
  ml_tools/ETL_cleaning.py,sha256=lSP5q6-ukGhJBPV8dlsqJvPXAzj4du_0J-SbtEd0Pjg,19292
4
4
  ml_tools/ETL_engineering.py,sha256=a6KCWH6kRatZtjaFEF_o917ApPMK5_vRD-BjfCDAl-E,49400
5
5
  ml_tools/GUI_tools.py,sha256=kEQWg-bog3pB5tI22gMGKWaCGHnz9TB2Lvvfhf5F2CI,45412
6
6
  ml_tools/MICE_imputation.py,sha256=kVSythWfxJFR4-2mtcYCWQaQ1Oz5yyx_SJu5gjnS7H8,11670
7
7
  ml_tools/ML_callbacks.py,sha256=JPvEw_cW5tYNJ2rMSgnNrKLuni_UrmuhDFaOw-u2SvA,13926
8
- ml_tools/ML_datasetmaster.py,sha256=CBZFpvm0qiY-8gP89iKTkd7jvU-rGQcJwk-_mBJmRSg,29273
8
+ ml_tools/ML_datasetmaster.py,sha256=uenjHP-Mh4tn20rWSEGN_JsCPvuPNDGW-PElBhb2a4I,30346
9
9
  ml_tools/ML_evaluation.py,sha256=28JJ2M71p4pxniwav2Hv3b1a5dsvaoIYNLm-UJQuXvY,16002
10
10
  ml_tools/ML_evaluation_multi.py,sha256=2jTSNFCu8cz5C05EusnrDyffs59M2Fq3UXSHxo2TR1A,12515
11
11
  ml_tools/ML_inference.py,sha256=SGDPiPxs_OYDKKRZziFMyaWcC8A37c70W9t-dMP5niI,23066
12
12
  ml_tools/ML_models.py,sha256=A_yeULMxT3IAuJuwIF5nXdAQwQDGsxHlbDSxtlzVG44,27699
13
13
  ml_tools/ML_optimization.py,sha256=a2Uxe1g-y4I-gFa8ENIM8QDS-Pz3hoPRRaVXAWMbyQA,13491
14
- ml_tools/ML_scaler.py,sha256=O8JzHr2551zPpKRRReEIMvq0lNAAPau6hV59KUMAySg,7420
15
- ml_tools/ML_trainer.py,sha256=xM-o-gbPhWXm2lOVXbeaTFotgJSDRSHyE7H0-9OOij4,23712
14
+ ml_tools/ML_scaler.py,sha256=yKVrXW6dWV6UoC9ViLMzORfXQXvGTJvzkNbSrB0F5t0,7447
15
+ ml_tools/ML_trainer.py,sha256=xw1zMgYpdqwsTt604xe3GTQNvpg6z6Ze-avmitGBFeU,23539
16
16
  ml_tools/PSO_optimization.py,sha256=q0VYpssQGbPum7xdnkDXlJQKhZMYZo8acHpKhajPK3c,22954
17
17
  ml_tools/RNN_forecast.py,sha256=8rNZr-eWOBXMiDQV22e_tQTPM5LM2IFggEAa1FaoXaI,1965
18
18
  ml_tools/SQL.py,sha256=WDgdZUYuLBUpv-4Am9XjVY_Aq_jxBWdLrbcgAIEwefI,10704
@@ -26,11 +26,11 @@ ml_tools/ensemble_evaluation.py,sha256=xMEMfXJ5MjTkTfr1LkFOeD7iUtnVDCW3S9lm3zT-6
26
26
  ml_tools/ensemble_inference.py,sha256=EFHnbjbu31fcVp88NBx8lWAVdu2Gpg9MY9huVZJHFfM,9350
27
27
  ml_tools/ensemble_learning.py,sha256=3s0kH4i_naj0IVl_T4knst-Hwg4TScWjEdsXX5KAi7I,21929
28
28
  ml_tools/handle_excel.py,sha256=He4UT15sCGhaG-JKfs7uYVAubxWjrqgJ6U7OhMR2fuE,14005
29
- ml_tools/keys.py,sha256=C_P-8EBVYFlajtddWkOFHN0imuRyN-tkjECaoFSJOxg,1230
29
+ ml_tools/keys.py,sha256=ThuyNnSV4iK712WRaGXEm9uGW8Dg3djKa7HFRmPCRr4,1228
30
30
  ml_tools/optimization_tools.py,sha256=P3I6lIpvZ8Xf2kX5FvvBKBmrK2pB6idBpkTzfUJxTeE,5073
31
31
  ml_tools/path_manager.py,sha256=7sRvAoNrboRY6ef9gH3_qdzoZ66iLs7Aii4P39K0kEk,13819
32
32
  ml_tools/utilities.py,sha256=SVMaSDigh6SUoAeig2_sXLLIj5w5mUs5KuVWpHvFDec,19816
33
- dragon_ml_toolbox-10.6.0.dist-info/METADATA,sha256=j_-cjm2w_DaUz9k9r4tlJ34zbsM9rQn7od2X_LaoSHU,6968
34
- dragon_ml_toolbox-10.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
- dragon_ml_toolbox-10.6.0.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
36
- dragon_ml_toolbox-10.6.0.dist-info/RECORD,,
33
+ dragon_ml_toolbox-10.7.0.dist-info/METADATA,sha256=3yKY50Qa3kt1lvDo_ELk3dUczIunDGuf6bB3UaiBl9g,6968
34
+ dragon_ml_toolbox-10.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
+ dragon_ml_toolbox-10.7.0.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
36
+ dragon_ml_toolbox-10.7.0.dist-info/RECORD,,
@@ -34,7 +34,9 @@ class _PytorchDataset(Dataset):
34
34
  def __init__(self, features: Union[numpy.ndarray, pandas.DataFrame],
35
35
  labels: Union[numpy.ndarray, pandas.Series],
36
36
  labels_dtype: torch.dtype,
37
- features_dtype: torch.dtype = torch.float32):
37
+ features_dtype: torch.dtype = torch.float32,
38
+ feature_names: Optional[List[str]] = None,
39
+ target_names: Optional[List[str]] = None):
38
40
  """
39
41
  integer labels for classification.
40
42
 
@@ -50,12 +52,30 @@ class _PytorchDataset(Dataset):
50
52
  self.labels = torch.tensor(labels, dtype=labels_dtype)
51
53
  else:
52
54
  self.labels = torch.tensor(labels.values, dtype=labels_dtype)
55
+
56
+ self._feature_names = feature_names
57
+ self._target_names = target_names
53
58
 
54
59
  def __len__(self):
55
60
  return len(self.features)
56
61
 
57
62
  def __getitem__(self, index):
58
63
  return self.features[index], self.labels[index]
64
+
65
+ @property
66
+ def feature_names(self):
67
+ if self._feature_names is not None:
68
+ return self._feature_names
69
+ else:
70
+ _LOGGER.error(f"Dataset {self.__class__} has not been initialized with any feature names.")
71
+ raise ValueError()
72
+
73
+ @property
74
+ def target_names(self):
75
+ if self._target_names is not None:
76
+ return self._target_names
77
+ else:
78
+ _LOGGER.error(f"Dataset {self.__class__} has not been initialized with any target names.")
59
79
 
60
80
 
61
81
  # --- Abstract Base Class (New) ---
@@ -229,8 +249,8 @@ class DatasetMaker(_BaseDatasetMaker):
229
249
  )
230
250
 
231
251
  # --- 4. Create Datasets ---
232
- self._train_ds = _PytorchDataset(X_train_final, y_train.values, label_dtype)
233
- self._test_ds = _PytorchDataset(X_test_final, y_test.values, label_dtype)
252
+ self._train_ds = _PytorchDataset(X_train_final, y_train.values, labels_dtype=label_dtype, feature_names=self._feature_names, target_names=[self._target_name])
253
+ self._test_ds = _PytorchDataset(X_test_final, y_test.values, labels_dtype=label_dtype, feature_names=self._feature_names, target_names=[self._target_name])
234
254
 
235
255
  @property
236
256
  def target_name(self) -> str:
@@ -280,8 +300,8 @@ class DatasetMakerMulti(_BaseDatasetMaker):
280
300
  X_train, y_train, X_test, label_dtype, continuous_feature_columns
281
301
  )
282
302
 
283
- self._train_ds = _PytorchDataset(X_train_final, y_train, label_dtype)
284
- self._test_ds = _PytorchDataset(X_test_final, y_test, label_dtype)
303
+ self._train_ds = _PytorchDataset(X_train_final, y_train, labels_dtype=label_dtype, feature_names=self._feature_names, target_names=self._target_names)
304
+ self._test_ds = _PytorchDataset(X_test_final, y_test, labels_dtype=label_dtype, feature_names=self._feature_names, target_names=self._target_names)
285
305
 
286
306
  @property
287
307
  def target_names(self) -> list[str]:
ml_tools/ML_scaler.py CHANGED
@@ -156,7 +156,7 @@ class PytorchScaler:
156
156
  Args:
157
157
  filepath (str | Path): The path to save the file.
158
158
  """
159
- path_obj = make_fullpath(filepath)
159
+ path_obj = make_fullpath(filepath, make=True, enforce="file")
160
160
  state = {
161
161
  'mean': self.mean_,
162
162
  'std': self.std_,
ml_tools/ML_trainer.py CHANGED
@@ -357,7 +357,7 @@ class MLTrainer:
357
357
  If None, the trainer's test dataset is used.
358
358
  n_samples (int): The number of samples to use for both background and explanation.
359
359
  feature_names (list[str] | None): Feature names.
360
- target_names (list[str] | None): Target names
360
+ target_names (list[str] | None): Target names for multi-target tasks.
361
361
  save_dir (str | Path): Directory to save all SHAP artifacts.
362
362
  """
363
363
  # Internal helper to create a dataloader and get a random sample
@@ -408,12 +408,8 @@ class MLTrainer:
408
408
  if hasattr(target_dataset, "feature_names"):
409
409
  feature_names = target_dataset.feature_names # type: ignore
410
410
  else:
411
- try:
412
- # Handle PyTorch Subset
413
- feature_names = target_dataset.dataset.feature_names # type: ignore
414
- except AttributeError:
415
- _LOGGER.error("Could not extract `feature_names` from the dataset. It must be provided if the dataset object does not have a `feature_names` attribute.")
416
- raise ValueError()
411
+ _LOGGER.error("Could not extract `feature_names` from the dataset. It must be provided if the dataset object does not have a `feature_names` attribute.")
412
+ raise ValueError()
417
413
 
418
414
  # 3. Call the plotting function
419
415
  if self.kind in ["regression", "classification"]:
ml_tools/keys.py CHANGED
@@ -40,8 +40,8 @@ class PyTorchInferenceKeys:
40
40
 
41
41
  class PytorchModelKeys:
42
42
  """Keys for saving and loading models"""
43
- MODEL = 'model_class',
44
- CONFIG = "config",
43
+ MODEL = 'model_class'
44
+ CONFIG = "config"
45
45
  SAVENAME = "architecture.json"
46
46
 
47
47