|
1 | 1 | import numpy as np |
2 | 2 | import copy |
3 | 3 | import json |
4 | | -import river |
5 | 4 | import river.preprocessing |
6 | 5 | from sklearn.pipeline import make_pipeline |
7 | 6 | from river import compose |
|
10 | 9 | from spotPython.utils.transform import transform_hyper_parameter_values |
11 | 10 |
|
12 | 11 | # Important, do not delete the following imports, they are needed for the function add_core_model_to_fun_control |
| 12 | +import river |
13 | 13 | from river import forest, tree, linear_model, rules |
14 | 14 | from river import preprocessing |
15 | 15 | import sklearn.metrics |
| 16 | +import spotPython |
| 17 | +from spotPython.light import regression |
16 | 18 |
|
17 | 19 |
|
18 | 20 | def generate_one_config_from_var_dict( |
@@ -1698,20 +1700,47 @@ def set_factor_hyperparameter_values(fun_control, key, levels): |
1698 | 1700 | fun_control["core_model_hyper_dict"][key].update({"upper": len(levels) - 1}) |
1699 | 1701 |
|
1700 | 1702 |
|
1701 | | -def get_core_model_from_name(core_model_name) -> object: |
| 1703 | +def get_core_model_from_name(core_model_name: str) -> tuple: |
1702 | 1704 | """ |
1703 | | - Returns the river core model name and instance from a core model name. |
| 1705 | + Returns the river or spotPython core model name and instance from a core model name. |
1704 | 1706 |
|
1705 | 1707 | Args: |
1706 | | - core_model_name (str): The name of the core model. |
| 1708 | + core_model_name (str): The full name of the core model in the format 'module.Model'. |
1707 | 1709 |
|
1708 | 1710 | Returns: |
1709 | | - (str, object): The core model name and instance. |
| 1711 | + (str, object): A tuple containing the core model name and an instance of the core model. |
| 1712 | +
|
| 1713 | + Examples: |
| 1714 | + >>> from spotPython.hyperparameters.values import get_core_model_from_name |
| 1715 | + model_name, model_instance = get_core_model_from_name('tree.HoeffdingTreeRegressor') |
| 1716 | + print(f"Model Name: {model_name}, Model Instance: {model_instance}") |
| 1717 | + Model Name: HoeffdingTreeRegressor, Model Instance: <class 'river.tree.hoeffding_tree_regressor.HoeffdingTreeRegressor'> |
| 1718 | + >>> model_name, model_instance = get_core_model_from_name("light.regression.NNLinearRegressor") |
| 1719 | + print(f"Model Name: {model_name}, Model Instance: {model_instance}") |
| 1720 | + Model Name: NNLinearRegressor, Model Instance: <class 'spotPython.light.regression.nn_linear_regressor.NNLinearRegressor'> |
1710 | 1721 | """ |
1711 | | - core_model_module = core_model_name.split(".")[0] |
1712 | | - coremodel = core_model_name.split(".")[1] |
1713 | | - core_model_instance = getattr(getattr(river, core_model_module), coremodel) |
1714 | | - return coremodel, core_model_instance |
| 1722 | + # Split the model name into its components |
| 1723 | + name_parts = core_model_name.split(".") |
| 1724 | + if len(name_parts) < 2: |
| 1725 | + raise ValueError(f"Invalid core model name: {core_model_name}. Expected format: 'module.ModelName'.") |
| 1726 | + module_name = name_parts[0] |
| 1727 | + model_name = name_parts[1] |
| 1728 | + try: |
| 1729 | + # Try to get the model from the river library |
| 1730 | + core_model_instance = getattr(getattr(river, module_name), model_name) |
| 1731 | + return model_name, core_model_instance |
| 1732 | + except AttributeError: |
| 1733 | + try: |
| 1734 | + # Try to get the model from the spotPython library |
| 1735 | + submodule_name = name_parts[1] |
| 1736 | + model_name = name_parts[2] if len(name_parts) == 3 else model_name |
| 1737 | + print(f"module_name: {module_name}") |
| 1738 | + print(f"submodule_name: {submodule_name}") |
| 1739 | + print(f"model_name: {model_name}") |
| 1740 | + core_model_instance = getattr(getattr(getattr(spotPython, module_name), submodule_name), model_name) |
| 1741 | + return model_name, core_model_instance |
| 1742 | + except AttributeError: |
| 1743 | + raise ValueError(f"Model '{core_model_name}' not found in either 'river' or 'spotPython' libraries.") |
1715 | 1744 |
|
1716 | 1745 |
|
1717 | 1746 | def get_prep_model(prepmodel_name) -> object: |
|
0 commit comments