espin086 / espin086/jjutils

Create AutoSKLearn Class

Open
#12 0 comments 0 reactions 1 assignee Claimed by @espin086 View on GitHub
Dominant language
Python
Stars
2
Forks
0
Avg merge
1m
Merged PRs (30d)
1

Description

Here is the starter code:

import autosklearn.classification
import autosklearn.regression
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
import joblib

class AutoMLModel:
def __init__(self, task='classification', time_left_for_this_task=3600, per_run_time_limit=300):
"""
Initialize the AutoMLModel.

:param task: Type of task, either 'classification', 'regression', or 'clustering'.
:param time_left_for_this_task: Time limit for the AutoML task in seconds.
:param per_run_time_limit: Time limit for each model run in seconds.
"""
self.task = task
self.time_left_for_this_task = time_left_for_this_task
self.per_run_time_limit = per_run_time_limit
self.automl = None
self.model = None

def fit(self, X, y=None, cluster_algorithm='kmeans', **kwargs):
"""
Fit the AutoML model to the data.

:param X: Features as a DataFrame or array.
:param y: Target variable as a Series or array (for classification and regression tasks).
:param cluster_algorithm: Clustering algorithm to use ('kmeans', 'dbscan', or 'agglomerative').
:param kwargs: Additional keyword arguments for the clustering algorithm.
"""
if self.task == 'classification':
self.automl = autosklearn.classification.AutoSklearnClassifier(
time_left_for_this_task=self.time_left_for_this_task,
per_run_time_limit=self.per_run_time_limit
)
self.automl.fit(X, y)
self.model = self.automl.show_models()
elif self.task == 'regression':
self.automl = autosklearn.regression.AutoSklearnRegressor(
time_left_for_this_task=self.time_left_for_this_task,
per_run_time_limit=self.per_run_time_limit
)
self.automl.fit(X, y)
self.model = self.automl.show_models()
elif self.task == 'clustering':
if cluster_algorithm == 'kmeans':
self.model = KMeans(**kwargs)
elif cluster_algorithm == 'dbscan':
self.model = DBSCAN(**kwargs)
elif cluster_algorithm == 'agglomerative':
self.model = AgglomerativeClustering(**kwargs)
else:
raise ValueError("Clustering algorithm must be 'kmeans', 'dbscan', or 'agglomerative'.")
self.model.fit(X)
else:
raise ValueError("Task must be 'classification', 'regression', or 'clustering'.")

def predict(self, X):
"""
Predict using the trained AutoML model.

:param X: Features as a DataFrame or array.
:return: Predictions as an array.
"""
if self.automl:
return self.automl.predict(X)
elif self.model:
return self.model.predict(X)
else:
print("Model has not been fitted yet.")
return None

def evaluate(self, X, y):
"""
Evaluate the model on the given data.

:param X: Features as a DataFrame or array.
:param y: True target variable values as a Series or array.
:return: Evaluation metric.
"""
predictions = self.predict(X)
if self.task == 'classification':
return accuracy_score(y, predictions)
elif self.task == 'regression':
return mean_squared_error(y, predictions, squared=False)
elif self.task == 'clustering':
# For clustering, evaluation metrics are different (e.g., silhouette score, etc.)
# Implement specific metrics as needed
return None

def save_model(self, file_path):
"""
Save the trained model to a file.

:param file_path: Path to the file where the model will be saved.
"""
if self.automl or self.model:
joblib.dump(self.automl if self.automl else self.model, file_path)
else:
print("Model has not been fitted yet.")

def load_model(self, file_path):
"""
Load a trained model from a file.

:param file_path: Path to the file where the model is saved.
"""
self.model = joblib.load(file_path)

def get_model(self):
"""
Get the underlying AutoML or clustering model.

:return: AutoML or clustering model object.
"""
return self.automl if self.task in ['classification', 'regression'] else self.model

def show_models(self):
"""
Show the models found during the AutoML process.

:return: List of models.
"""
if self.task in ['classification', 'regression'] and self.automl:
return self.model
else:
print("Model has not been fitted yet.")
return None

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.