autohpsearch


Nameautohpsearch JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/rudyvdbrink/autohpsearch
SummaryA package for hyperparameter tuning of models for cross-sectional data.
upload_time2025-08-06 08:52:58
maintainerNone
docs_urlNone
authorrudyvdbrink
requires_python>=3.7
licenseMIT
keywords hyperparameter search autotuning machine-learning
VCS
bugtrack_url
requirements asttokens bs4 colorama contractions comm datasets debugpy decorator executing imbalanced-learn ipykernel ipython ipython_pygments_lexers jedi joblib jupyter_client jupyter_core matplotlib-inline matplotlib nest-asyncio numpy packaging pandas parso peft platformdirs prompt_toolkit psutil pure_eval Pygments python-dateutil pytz pywin32 pyzmq scikit-learn scikit-optimize scipy seaborn six stack-data stanza tabulate textblob threadpoolctl tornado tqdm traitlets typing_extensions tzdata wcwidth xgboost torch torchaudio torchvision
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# AutoHPSearch

A Python package for automatic hyperparameter tuning of machine learning models for cross-sectional data. AutoHPSearch simplifies the process of hyperparameter optimization for various machine learning models by providing a unified interface to tune hyperparameters across multiple model types.

AutoHPSearch also contains functionality for full end-to-end pipelines that include cleaning, parameter search, model evaluation, automated production of data reports in markdown format ([example here](https://github.com/rudyvdbrink/autohpsearch/blob/main/example_reports/data_report_v0001_20250612_200805.md)), as well as fine tuning large language models with low-rank adapters.  

The hyperparameter search space is navigated with grid, random, or bayesian search. Random search is faster but provides a less comprehensive coverage of the search space. CUDA-enabled computing for neural network implementations is included.

## Installation

```bash
pip install autohpsearch
```

Or install directly from the repository:

```bash
git clone https://github.com/rudyvdbrink/autohpsearch.git
cd autohpsearch
pip install -e .
```

To enable CUDA you need to manually install the right version of torch+cuda depending on your GPU and system.

## Usage

### Examples Scripts
- [Classification](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/basic_classification.py) - Demonstrates simple binary classification
- [Regression](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/basic_regression.py) - Simple regression example
- [Neural Network Usage](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/nn_usage.py) - Syntax examples for using scikit-learn compatible neural networks
- [Iris Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/iris_example.py) - Examples of both classification and regression solving using real data
- [Pipeline Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/pipeline_example.py) - An example of a full automated end-to-end pipeline
- [LLM Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/llm_classification.py) - An example of how to fine tune an LLM for a sequence classification task

### Creating and Fitting a Full End-To-End Automatic Pipeline

```python
# Import requirements
from autohpsearch.datasets.dataloaders import fetch_housing
from autohpsearch import AutoMLPipeline

# Load an example dataset
X_train, X_test, y_train, y_test = fetch_housing()

# Fit the pipeline: this will clean the data run hyperparameter search, train models, and evaluate them
pipeline = AutoMLPipeline(task_type='regression')
pipeline.fit(X_train=X_train,X_test=X_test,y_train=y_train,y_test=y_test)
```
### Automated Reports on Data Distributions And Model Performance

AutoHPSearch can generate a report on the data that includes plots of feature distributions before and after data cleaning, and statistics on requested properties of the data such as the number of outliers etc. It will also include plots for the best performing model to examine its performance on the test set. You can find an example report [here](https://github.com/rudyvdbrink/autohpsearch/blob/main/example_reports/data_report_v0001_20250612_200805.md). To create a report, simply run:

```python
# Write a report in markdown format 
pipeline.generate_data_report()
```
### Example Classification With Specified Models

```python
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

from autohpsearch import tune_hyperparameters, generate_hypergrid

# Generate synthetic data
X, y = make_classification(n_samples=1000, n_features=10, random_state=42)

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Generate hyperparameter grid for multiple models
hypergrid = generate_hypergrid(['logistic_regression', 'random_forest_clf', 'xgboost_clf'])

# Tune hyperparameters
results = tune_hyperparameters(
    X_train, y_train, 
    X_test, y_test, 
    hypergrid=hypergrid, 
    scoring='balanced_accuracy',
    search_type='random',
    cv=5
)

# Access best model and results
best_model = results['best_model'] # The winning model
optimal_params = results['optimal_params'] # Best paramters for each model
performance_results = results['results'] # cross-validation and test score table

print(f"Best model: {type(best_model).__name__}")
print(f"Optimal parameters: {optimal_params}")
print(f"Results summary:\n{performance_results}")
```

### Fitting Neural Network Models

```python
from autohpsearch.models.nn import AutoHPSearchClassifier

# Create a neural network classifier with custom parameters
nn_clf = AutoHPSearchClassifier(
    hidden_layers=(64, 32),
    activation='relu',
    dropout_rate=0.2,
    learning_rate=0.001,
    optimizer='adam',
    batch_size=32,
    epochs=100
)

# Train the model
nn_clf.fit(X_train_scaled, y_train)

# Make predictions
y_pred = nn_clf.predict(X_test_scaled)
```

### Fine Tuning Large Language Models

AutoHPSearch includes functionality for low-rank adaptation of large language models. The fitting process is integrated with the transformers library, so pre-trained base models are downloaded from huggingface. Model classes also contain methods for pushing trained models to hugginface hub. 

```python
from autohpsearch import AutoLoraForSeqClass
from autohpsearch.datasets.dataloaders import fetch_imdb

# Get the data (a selection of imdb reviews, which can be positive or negative)
dataset = fetch_imdb()

# Initialize the model with a base model, and LoRA parameters
model = AutoLoraForSeqClass(base_model='bert-base-uncased',
                            r=2,
                            train_batch_size=8,
                            eval_batch_size=8,
                            num_train_epochs=3,
                            )

# Fit the model on the dataset
model.fit(dataset)

# Push the model to hugging face hub
model.push()
```

## Available Models

AutoHPSearch supports the following model types for end-to-end training:

### Classification Models
1. **logistic_regression**: Logistic regression classifier (including L1 / L2 / elastic net regularization)
2. **random_forest_clf**: Random forest classifier
3. **gradient_boosting_clf**: Gradient boosting classifier
4. **svm_clf**: Support vector machine classifier
5. **knn_clf**: K-nearest neighbors classifier
6. **xgboost_clf**: XGBoost classifier
7. **dnn_clf**: Deep neural network classifier

### Regression Models
1. **linear_regression**: Linear regression
2. **ridge**: Ridge regression
3. **lasso**: Lasso regression
4. **elastic_net**: Elastic Net regression
5. **random_forest_reg**: Random forest regressor
6. **gradient_boosting_reg**: Gradient boosting regressor
7. **svr**: Support vector regression
8. **knn_reg**: K-nearest neighbors regressor
9. **xgboost_reg**: XGBoost regressor
10. **dnn_reg**: Deep neural network regressor

### Large Language Models

- The base models for sequence tasks are drawn from [HuggingFace.co](https://www.huggingface.co), so any model that is hosted there is supported in principle. These include popular pre-trained models such as Meta's Llama models, Mistral, GPT-Neo, and others. 

## Hyperparameter Tuning

The `generate_hypergrid()` function creates a comprehensive grid of hyperparameters for each model type. You can:

- Generate grids for all supported models: `generate_hypergrid(task_type='classification')`
- Generate a grid for a specific model: `generate_hypergrid('random_forest_clf')` or `generate_hypergrid('random_forest_reg', task_type='regression')`
- Generate grids for multiple models: `generate_hypergrid(['logistic_regression', 'xgboost_clf'])`

The `tune_hyperparameters()` function performs grid search cross-validation on the specified models and returns:

- The best overall model
- Optimal parameters for each model
- Performance metrics for each model

## Neural Network Models / LLMs

AutoHPSearch includes custom neural network implementations that are compatible with scikit-learn:

- `AutoHPSearchClassifier`: For classification tasks
- `AutoHPSearchRegressor`: For regression tasks

These models provide flexibility in architecture design and training configuration while maintaining the familiar scikit-learn API.

Large language model classes:
- `AutoLoraForSeqClass`: For sequence classificiation tasks
- `AutoLoraForSeqReg`: For sequence regression tasks

## Author

[Rudy van den Brink](https://www.brinkdatascience.com)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/rudyvdbrink/autohpsearch",
    "name": "autohpsearch",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "hyperparameter search autotuning machine-learning",
    "author": "rudyvdbrink",
    "author_email": "info@brinkdatascience.com",
    "download_url": "https://files.pythonhosted.org/packages/17/a1/d095a69394f028a3fba9dcf80c9b6a91ed2518e2f5f155a72754c8ca32dd/autohpsearch-1.0.1.tar.gz",
    "platform": null,
    "description": "\r\n# AutoHPSearch\r\n\r\nA Python package for automatic hyperparameter tuning of machine learning models for cross-sectional data. AutoHPSearch simplifies the process of hyperparameter optimization for various machine learning models by providing a unified interface to tune hyperparameters across multiple model types.\r\n\r\nAutoHPSearch also contains functionality for full end-to-end pipelines that include cleaning, parameter search, model evaluation, automated production of data reports in markdown format ([example here](https://github.com/rudyvdbrink/autohpsearch/blob/main/example_reports/data_report_v0001_20250612_200805.md)), as well as fine tuning large language models with low-rank adapters.  \r\n\r\nThe hyperparameter search space is navigated with grid, random, or bayesian search. Random search is faster but provides a less comprehensive coverage of the search space. CUDA-enabled computing for neural network implementations is included.\r\n\r\n## Installation\r\n\r\n```bash\r\npip install autohpsearch\r\n```\r\n\r\nOr install directly from the repository:\r\n\r\n```bash\r\ngit clone https://github.com/rudyvdbrink/autohpsearch.git\r\ncd autohpsearch\r\npip install -e .\r\n```\r\n\r\nTo enable CUDA you need to manually install the right version of torch+cuda depending on your GPU and system.\r\n\r\n## Usage\r\n\r\n### Examples Scripts\r\n- [Classification](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/basic_classification.py) - Demonstrates simple binary classification\r\n- [Regression](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/basic_regression.py) - Simple regression example\r\n- [Neural Network Usage](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/nn_usage.py) - Syntax examples for using scikit-learn compatible neural networks\r\n- [Iris Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/iris_example.py) - Examples of both classification and regression solving using real data\r\n- [Pipeline Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/pipeline_example.py) - An example of a full automated end-to-end pipeline\r\n- [LLM Example](https://github.com/rudyvdbrink/autohpsearch/blob/main/examples/llm_classification.py) - An example of how to fine tune an LLM for a sequence classification task\r\n\r\n### Creating and Fitting a Full End-To-End Automatic Pipeline\r\n\r\n```python\r\n# Import requirements\r\nfrom autohpsearch.datasets.dataloaders import fetch_housing\r\nfrom autohpsearch import AutoMLPipeline\r\n\r\n# Load an example dataset\r\nX_train, X_test, y_train, y_test = fetch_housing()\r\n\r\n# Fit the pipeline: this will clean the data run hyperparameter search, train models, and evaluate them\r\npipeline = AutoMLPipeline(task_type='regression')\r\npipeline.fit(X_train=X_train,X_test=X_test,y_train=y_train,y_test=y_test)\r\n```\r\n### Automated Reports on Data Distributions And Model Performance\r\n\r\nAutoHPSearch can generate a report on the data that includes plots of feature distributions before and after data cleaning, and statistics on requested properties of the data such as the number of outliers etc. It will also include plots for the best performing model to examine its performance on the test set. You can find an example report [here](https://github.com/rudyvdbrink/autohpsearch/blob/main/example_reports/data_report_v0001_20250612_200805.md). To create a report, simply run:\r\n\r\n```python\r\n# Write a report in markdown format \r\npipeline.generate_data_report()\r\n```\r\n### Example Classification With Specified Models\r\n\r\n```python\r\nfrom sklearn.datasets import make_classification\r\nfrom sklearn.model_selection import train_test_split\r\n\r\nfrom autohpsearch import tune_hyperparameters, generate_hypergrid\r\n\r\n# Generate synthetic data\r\nX, y = make_classification(n_samples=1000, n_features=10, random_state=42)\r\n\r\n# Split data\r\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\r\n\r\n# Generate hyperparameter grid for multiple models\r\nhypergrid = generate_hypergrid(['logistic_regression', 'random_forest_clf', 'xgboost_clf'])\r\n\r\n# Tune hyperparameters\r\nresults = tune_hyperparameters(\r\n    X_train, y_train, \r\n    X_test, y_test, \r\n    hypergrid=hypergrid, \r\n    scoring='balanced_accuracy',\r\n    search_type='random',\r\n    cv=5\r\n)\r\n\r\n# Access best model and results\r\nbest_model = results['best_model'] # The winning model\r\noptimal_params = results['optimal_params'] # Best paramters for each model\r\nperformance_results = results['results'] # cross-validation and test score table\r\n\r\nprint(f\"Best model: {type(best_model).__name__}\")\r\nprint(f\"Optimal parameters: {optimal_params}\")\r\nprint(f\"Results summary:\\n{performance_results}\")\r\n```\r\n\r\n### Fitting Neural Network Models\r\n\r\n```python\r\nfrom autohpsearch.models.nn import AutoHPSearchClassifier\r\n\r\n# Create a neural network classifier with custom parameters\r\nnn_clf = AutoHPSearchClassifier(\r\n    hidden_layers=(64, 32),\r\n    activation='relu',\r\n    dropout_rate=0.2,\r\n    learning_rate=0.001,\r\n    optimizer='adam',\r\n    batch_size=32,\r\n    epochs=100\r\n)\r\n\r\n# Train the model\r\nnn_clf.fit(X_train_scaled, y_train)\r\n\r\n# Make predictions\r\ny_pred = nn_clf.predict(X_test_scaled)\r\n```\r\n\r\n### Fine Tuning Large Language Models\r\n\r\nAutoHPSearch includes functionality for low-rank adaptation of large language models. The fitting process is integrated with the transformers library, so pre-trained base models are downloaded from huggingface. Model classes also contain methods for pushing trained models to hugginface hub. \r\n\r\n```python\r\nfrom autohpsearch import AutoLoraForSeqClass\r\nfrom autohpsearch.datasets.dataloaders import fetch_imdb\r\n\r\n# Get the data (a selection of imdb reviews, which can be positive or negative)\r\ndataset = fetch_imdb()\r\n\r\n# Initialize the model with a base model, and LoRA parameters\r\nmodel = AutoLoraForSeqClass(base_model='bert-base-uncased',\r\n                            r=2,\r\n                            train_batch_size=8,\r\n                            eval_batch_size=8,\r\n                            num_train_epochs=3,\r\n                            )\r\n\r\n# Fit the model on the dataset\r\nmodel.fit(dataset)\r\n\r\n# Push the model to hugging face hub\r\nmodel.push()\r\n```\r\n\r\n## Available Models\r\n\r\nAutoHPSearch supports the following model types for end-to-end training:\r\n\r\n### Classification Models\r\n1. **logistic_regression**: Logistic regression classifier (including L1 / L2 / elastic net regularization)\r\n2. **random_forest_clf**: Random forest classifier\r\n3. **gradient_boosting_clf**: Gradient boosting classifier\r\n4. **svm_clf**: Support vector machine classifier\r\n5. **knn_clf**: K-nearest neighbors classifier\r\n6. **xgboost_clf**: XGBoost classifier\r\n7. **dnn_clf**: Deep neural network classifier\r\n\r\n### Regression Models\r\n1. **linear_regression**: Linear regression\r\n2. **ridge**: Ridge regression\r\n3. **lasso**: Lasso regression\r\n4. **elastic_net**: Elastic Net regression\r\n5. **random_forest_reg**: Random forest regressor\r\n6. **gradient_boosting_reg**: Gradient boosting regressor\r\n7. **svr**: Support vector regression\r\n8. **knn_reg**: K-nearest neighbors regressor\r\n9. **xgboost_reg**: XGBoost regressor\r\n10. **dnn_reg**: Deep neural network regressor\r\n\r\n### Large Language Models\r\n\r\n- The base models for sequence tasks are drawn from [HuggingFace.co](https://www.huggingface.co), so any model that is hosted there is supported in principle. These include popular pre-trained models such as Meta's Llama models, Mistral, GPT-Neo, and others. \r\n\r\n## Hyperparameter Tuning\r\n\r\nThe `generate_hypergrid()` function creates a comprehensive grid of hyperparameters for each model type. You can:\r\n\r\n- Generate grids for all supported models: `generate_hypergrid(task_type='classification')`\r\n- Generate a grid for a specific model: `generate_hypergrid('random_forest_clf')` or `generate_hypergrid('random_forest_reg', task_type='regression')`\r\n- Generate grids for multiple models: `generate_hypergrid(['logistic_regression', 'xgboost_clf'])`\r\n\r\nThe `tune_hyperparameters()` function performs grid search cross-validation on the specified models and returns:\r\n\r\n- The best overall model\r\n- Optimal parameters for each model\r\n- Performance metrics for each model\r\n\r\n## Neural Network Models / LLMs\r\n\r\nAutoHPSearch includes custom neural network implementations that are compatible with scikit-learn:\r\n\r\n- `AutoHPSearchClassifier`: For classification tasks\r\n- `AutoHPSearchRegressor`: For regression tasks\r\n\r\nThese models provide flexibility in architecture design and training configuration while maintaining the familiar scikit-learn API.\r\n\r\nLarge language model classes:\r\n- `AutoLoraForSeqClass`: For sequence classificiation tasks\r\n- `AutoLoraForSeqReg`: For sequence regression tasks\r\n\r\n## Author\r\n\r\n[Rudy van den Brink](https://www.brinkdatascience.com)\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A package for hyperparameter tuning of models for cross-sectional data.",
    "version": "1.0.1",
    "project_urls": {
        "Homepage": "https://github.com/rudyvdbrink/autohpsearch"
    },
    "split_keywords": [
        "hyperparameter",
        "search",
        "autotuning",
        "machine-learning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b1587101a9963af20f233c4f0c5b4963156b6ba986607aa3b61d04224c9b61a",
                "md5": "4509778584631b31d5cd381ac1868211",
                "sha256": "e316378418909da822dff29fd08692218ec595342df28a972403ebd2213b5e34"
            },
            "downloads": -1,
            "filename": "autohpsearch-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4509778584631b31d5cd381ac1868211",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 64422,
            "upload_time": "2025-08-06T08:52:57",
            "upload_time_iso_8601": "2025-08-06T08:52:57.904029Z",
            "url": "https://files.pythonhosted.org/packages/5b/15/87101a9963af20f233c4f0c5b4963156b6ba986607aa3b61d04224c9b61a/autohpsearch-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "17a1d095a69394f028a3fba9dcf80c9b6a91ed2518e2f5f155a72754c8ca32dd",
                "md5": "2877d9ccb8647063a6d4068dd90bdf6a",
                "sha256": "6f02e548c77ffa44acbfc50fe614858036d0628ce9d987ca09950a62bff5b8f2"
            },
            "downloads": -1,
            "filename": "autohpsearch-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2877d9ccb8647063a6d4068dd90bdf6a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 61091,
            "upload_time": "2025-08-06T08:52:58",
            "upload_time_iso_8601": "2025-08-06T08:52:58.999691Z",
            "url": "https://files.pythonhosted.org/packages/17/a1/d095a69394f028a3fba9dcf80c9b6a91ed2518e2f5f155a72754c8ca32dd/autohpsearch-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-06 08:52:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "rudyvdbrink",
    "github_project": "autohpsearch",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "asttokens",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "bs4",
            "specs": [
                [
                    "==",
                    "0.0.2"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "contractions",
            "specs": [
                [
                    "==",
                    "0.1.73"
                ]
            ]
        },
        {
            "name": "comm",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "datasets",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "debugpy",
            "specs": [
                [
                    "==",
                    "1.8.14"
                ]
            ]
        },
        {
            "name": "decorator",
            "specs": [
                [
                    "==",
                    "5.2.1"
                ]
            ]
        },
        {
            "name": "executing",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "imbalanced-learn",
            "specs": [
                [
                    "==",
                    "0.13.0"
                ]
            ]
        },
        {
            "name": "ipykernel",
            "specs": [
                [
                    "==",
                    "6.29.5"
                ]
            ]
        },
        {
            "name": "ipython",
            "specs": [
                [
                    "==",
                    "9.2.0"
                ]
            ]
        },
        {
            "name": "ipython_pygments_lexers",
            "specs": [
                [
                    "==",
                    "1.1.1"
                ]
            ]
        },
        {
            "name": "jedi",
            "specs": [
                [
                    "==",
                    "0.19.2"
                ]
            ]
        },
        {
            "name": "joblib",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "jupyter_client",
            "specs": [
                [
                    "==",
                    "8.6.3"
                ]
            ]
        },
        {
            "name": "jupyter_core",
            "specs": [
                [
                    "==",
                    "5.7.2"
                ]
            ]
        },
        {
            "name": "matplotlib-inline",
            "specs": [
                [
                    "==",
                    "0.1.7"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "==",
                    "3.10.3"
                ]
            ]
        },
        {
            "name": "nest-asyncio",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "2.2.5"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "25.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.2.3"
                ]
            ]
        },
        {
            "name": "parso",
            "specs": [
                [
                    "==",
                    "0.8.4"
                ]
            ]
        },
        {
            "name": "peft",
            "specs": [
                [
                    "==",
                    "0.16.0"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "4.3.8"
                ]
            ]
        },
        {
            "name": "prompt_toolkit",
            "specs": [
                [
                    "==",
                    "3.0.51"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "7.0.0"
                ]
            ]
        },
        {
            "name": "pure_eval",
            "specs": [
                [
                    "==",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.19.1"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "pywin32",
            "specs": [
                [
                    "==",
                    "310"
                ]
            ]
        },
        {
            "name": "pyzmq",
            "specs": [
                [
                    "==",
                    "26.4.0"
                ]
            ]
        },
        {
            "name": "scikit-learn",
            "specs": [
                [
                    "==",
                    "1.6.1"
                ]
            ]
        },
        {
            "name": "scikit-optimize",
            "specs": [
                [
                    "==",
                    "0.10.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.15.3"
                ]
            ]
        },
        {
            "name": "seaborn",
            "specs": [
                [
                    "==",
                    "0.13.2"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.17.0"
                ]
            ]
        },
        {
            "name": "stack-data",
            "specs": [
                [
                    "==",
                    "0.6.3"
                ]
            ]
        },
        {
            "name": "stanza",
            "specs": [
                [
                    "==",
                    "1.10.1"
                ]
            ]
        },
        {
            "name": "tabulate",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "textblob",
            "specs": [
                [
                    "==",
                    "0.19.0"
                ]
            ]
        },
        {
            "name": "threadpoolctl",
            "specs": [
                [
                    "==",
                    "3.6.0"
                ]
            ]
        },
        {
            "name": "tornado",
            "specs": [
                [
                    "==",
                    "6.4.2"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.67.1"
                ]
            ]
        },
        {
            "name": "traitlets",
            "specs": [
                [
                    "==",
                    "5.14.3"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": [
                [
                    "==",
                    "4.13.2"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2025.2"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.13"
                ]
            ]
        },
        {
            "name": "xgboost",
            "specs": [
                [
                    "==",
                    "3.0.1"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    "==",
                    "2.6.0"
                ]
            ]
        },
        {
            "name": "torchaudio",
            "specs": [
                [
                    "==",
                    "2.6.0"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    "==",
                    "0.21.0"
                ]
            ]
        }
    ],
    "lcname": "autohpsearch"
}
        
Elapsed time: 2.25762s