Source code for cleanlab.datalab.internal.task
# Copyright (C) 2017-2024 Cleanlab Inc.
# This file is part of cleanlab.
#
# cleanlab is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cleanlab is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with cleanlab. If not, see <https://www.gnu.org/licenses/>.
"""
This module contains the Task enum, which internally represents the tasks
supported by Datalab, so that the appropriate task-specific logic can be applied.
This class and associated naming conventions are subject to change and is not meant
to be used by users.
"""
from enum import Enum
[docs]class Task(Enum):
"""
Represents a task supported by Datalab.
Datalab supports the following tasks:
* **Classification**: for predicting discrete class labels.
* **Regression**: for predicting continuous numerical values.
* **Multilabel**: for predicting multiple binary labels simultaneously.
Example
-------
>>> task = Task.CLASSIFICATION
>>> task
<Task.CLASSIFICATION: 'classification'>
"""
CLASSIFICATION = "classification"
"""Classification task."""
REGRESSION = "regression"
"""Regression task."""
MULTILABEL = "multilabel"
"""Multilabel task."""
def __str__(self):
"""
Returns the string representation of the task.
Returns:
str: The string representation of the task.
"""
return self.value
[docs] @classmethod
def from_str(cls, task_str: str) -> "Task":
"""
Converts a string representation of a task to a Task enum value.
Parameters
----------
task_str :
The string representation of the task.
Returns
-------
Task :
The corresponding Task enum value.
Raises
------
ValueError :
If the provided task_str is not a valid task supported by Datalab.
Examples
--------
>>> Task.from_str("classification")
<Task.CLASSIFICATION: 'classification'>
>>> print(Task.from_str("regression"))
regression
"""
_value_to_enum = {task.value: task for task in Task}
try:
return _value_to_enum[task_str]
except KeyError:
valid_tasks = list(_value_to_enum.keys())
raise ValueError(f"Invalid task: {task_str}. Datalab only supports {valid_tasks}.")
@property
def is_classification(self):
"""
Checks if the task is classification.
Returns
-------
bool :
True if the task is classification, False otherwise.
Examples
--------
>>> task = Task.CLASSIFICATION
>>> print(task.is_classification)
True
"""
return self == Task.CLASSIFICATION
@property
def is_regression(self):
"""
Checks if the task is regression.
Returns
-------
bool :
True if the task is regression, False otherwise.
Examples
--------
>>> task = Task.CLASSIFICATION
>>> print(task.is_regression)
False
"""
return self == Task.REGRESSION
@property
def is_multilabel(self):
"""
Checks if the task is multilabel.
Returns
-------
bool :
True if the task is multilabel, False otherwise.
Examples
--------
>>> task = Task.CLASSIFICATION
>>> print(task.is_multilabel)
False
"""
return self == Task.MULTILABEL