dragon-ml-toolbox 3.12.1__py3-none-any.whl → 3.12.2__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: 3.12.1
3
+ Version: 3.12.2
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,7 +1,7 @@
1
- dragon_ml_toolbox-3.12.1.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
- dragon_ml_toolbox-3.12.1.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=lY4_rJPnLnMu7YBQaY-_iz1JRDcLdQzNCyeLAF1glJY,1837
1
+ dragon_ml_toolbox-3.12.2.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
+ dragon_ml_toolbox-3.12.2.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=lY4_rJPnLnMu7YBQaY-_iz1JRDcLdQzNCyeLAF1glJY,1837
3
3
  ml_tools/ETL_engineering.py,sha256=yeZsW_7zRvEcuMZbM4E2GV1dxwBoWIeJAcFFk2AK0fY,39502
4
- ml_tools/GUI_tools.py,sha256=VonZEizPS0ncm8HWU-ik-SgcXKryJU8eSG7NN0QN9cc,42222
4
+ ml_tools/GUI_tools.py,sha256=SkPqqY0xdxVq3C0hpcMVxEseVXzW3eT9jN1RUlP6qbA,43105
5
5
  ml_tools/MICE_imputation.py,sha256=7CDsIQxx5Jb_DwPAmWmz3FXcn85sUyH7g9UcZ1_E07s,11412
6
6
  ml_tools/ML_callbacks.py,sha256=g_9nSzoA22UJOQZCPKeDz-Ayh0ECFZLzRd6rZ8SokrE,13080
7
7
  ml_tools/ML_evaluation.py,sha256=oiDV6HItQloUUKCUpltV-2pogubWLBieGpc-VUwosAQ,10106
@@ -16,11 +16,11 @@ ml_tools/data_exploration.py,sha256=ZpjK_lN5mDhjf9iQpvyYNA2SF7M5q4D5m09saln7YFI,
16
16
  ml_tools/datasetmaster.py,sha256=S3PKHNQZ9cyAOck8xQltVLZhaD1gFLfgHFL-aRjz4JU,30077
17
17
  ml_tools/ensemble_learning.py,sha256=D-9IbOKtCvyAB-LbPu3sdSRtdp0RZIcQEZcyMnarHmQ,45758
18
18
  ml_tools/handle_excel.py,sha256=2Q_MBArss4emPQ8p-Uj9x_e7wGg3OoYM2AU_HG59UCY,12978
19
- ml_tools/keys.py,sha256=A3mLrtLZrxL27whAs2F1GPqZ1KzJpxBp6QbhxY5ioPI,636
19
+ ml_tools/keys.py,sha256=3YVbcYARSjE3vKr_6PavJSf7vXvlos7szu3qva4T3Ts,781
20
20
  ml_tools/logger.py,sha256=UkbiU9ihBhw9VKyn3rZzisdClWV94EBV6B09_D0iUU0,6026
21
21
  ml_tools/path_manager.py,sha256=1LD9JFzqVyJQl2kTA7tK930_IV3qxfiV4cMIBzItytY,8309
22
22
  ml_tools/utilities.py,sha256=Vh4ZdI03g8EpgQL7KDwnAw2vtBlHtx6KxCuAATxLvT4,24208
23
- dragon_ml_toolbox-3.12.1.dist-info/METADATA,sha256=vwEN95BhK71LrhuuTuZbxdyfdq_X5VljuP89uXNguok,3274
24
- dragon_ml_toolbox-3.12.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
- dragon_ml_toolbox-3.12.1.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
26
- dragon_ml_toolbox-3.12.1.dist-info/RECORD,,
23
+ dragon_ml_toolbox-3.12.2.dist-info/METADATA,sha256=JyL5AgD0yfz5tZL8bT0w4EYlKwDwU5DbabfWQl77vNs,3274
24
+ dragon_ml_toolbox-3.12.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
+ dragon_ml_toolbox-3.12.2.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
26
+ dragon_ml_toolbox-3.12.2.dist-info/RECORD,,
ml_tools/GUI_tools.py CHANGED
@@ -7,6 +7,7 @@ from typing import Any, Dict, Tuple, List, Literal, Union, Optional, Callable
7
7
  from .utilities import _script_info
8
8
  import numpy as np
9
9
  from .logger import _LOGGER
10
+ from .keys import _OneHotOtherPlaceholder
10
11
 
11
12
 
12
13
  __all__ = [
@@ -416,7 +417,7 @@ class FeatureMaster:
416
417
 
417
418
  This class serves as a centralized registry for all features and targets
418
419
  used by a model. It is designed to bridge the gap between a user-facing
419
- application (like a GUI) and the underlying model's data representation.
420
+ application (GUI) and the underlying model's data representation.
420
421
 
421
422
  It takes various types of features (continuous, binary, one-hot encoded,
422
423
  categorical) and targets, processing them into two key formats:
@@ -439,7 +440,8 @@ class FeatureMaster:
439
440
  binary_features: Optional[Dict[str, str]] = None,
440
441
  multi_binary_features: Optional[Dict[str, Dict[str, str]]] = None,
441
442
  one_hot_features: Optional[Dict[str, Dict[str, str]]] = None,
442
- categorical_features: Optional[List[Tuple[str, str, Dict[str, int]]]] = None) -> None:
443
+ categorical_features: Optional[List[Tuple[str, str, Dict[str, int]]]] = None,
444
+ add_one_hot_other_placeholder: bool = True) -> None:
443
445
  """
444
446
  Initializes the FeatureMaster instance by processing feature and target definitions.
445
447
 
@@ -490,6 +492,9 @@ class FeatureMaster:
490
492
  - `[1]` (str): The model's internal feature name.
491
493
  - `[2]` (Dict[str, int]): A dictionary mapping the user-selectable
492
494
  options to their corresponding integer values.
495
+
496
+ add_one_hot_other_placeholder (bool):
497
+ Add a placeholder for the "Other" option. Used if `drop_first` was used when making the one-hot-encoding to prevent multicollinearity.
493
498
  """
494
499
  # Validation
495
500
  if continuous_features is None and binary_features is None and one_hot_features is None and categorical_features is None and multi_binary_features is None:
@@ -526,7 +531,15 @@ class FeatureMaster:
526
531
  self.has_multi_binary = False
527
532
 
528
533
  # one-hot features
534
+ self._has_one_hot_other = False
529
535
  if one_hot_features is not None:
536
+ # Check for add_other
537
+ if add_one_hot_other_placeholder:
538
+ self._has_one_hot_other = True
539
+ # update OTHER value in-place
540
+ for _gui_name, one_hot_dict in one_hot_features.items():
541
+ one_hot_dict.update(_OneHotOtherPlaceholder.OTHER_DICT)
542
+
530
543
  self._one_hot_values = self._handle_one_hot_features(one_hot_features)
531
544
  self._one_hot_mapping = one_hot_features
532
545
  self.has_one_hot = True
@@ -861,11 +874,17 @@ class GUIHandler:
861
874
  _LOGGER.error(f"No matching name for '{gui_feature}' defined as one-hot.")
862
875
  raise e
863
876
  else:
864
- mapped_chosen_value = one_hot_mapping[chosen_value]
865
877
  # base results mapped to 0
866
878
  results = {model_key: 0 for model_key in one_hot_mapping.values()}
879
+ # get mapped key
880
+ mapped_chosen_value = one_hot_mapping[chosen_value]
867
881
  # update chosen value
868
882
  results[mapped_chosen_value] = 1
883
+
884
+ # check if OTHER was added
885
+ if self.master._has_one_hot_other:
886
+ results.pop(_OneHotOtherPlaceholder.OTHER_MODEL)
887
+
869
888
  return results
870
889
 
871
890
  def _process_categorical(self, gui_feature: str, chosen_value: str) -> Tuple[str,int]:
ml_tools/keys.py CHANGED
@@ -26,3 +26,9 @@ class ModelSaveKeys:
26
26
  # Classification keys
27
27
  CLASSIFICATION_LABEL = "label"
28
28
  CLASSIFICATION_PROBABILITIES = "probabilities"
29
+
30
+
31
+ class _OneHotOtherPlaceholder:
32
+ OTHER_GUI = "OTHER"
33
+ OTHER_MODEL = "one hot OTHER placeholder"
34
+ OTHER_DICT = {OTHER_GUI: OTHER_MODEL}