Source code for sklearn_nominal.backend.core

from __future__ import annotations

import abc
import enum

import numpy as np
import pandas as pd

from sklearn_nominal.backend import ColumnID, Input, InputSample

from .conditions import Condition


class ColumnType(enum.Enum):
    Numeric = 0
    Nominal = 1


Partition = list["Dataset"]


[docs] class Dataset(abc.ABC): """ A Dataset abstracts away the contents of a dataset and provides common operations, specially filtering and statistics operations, to implement models that support nominal attributes. """ @abc.abstractmethod def split(self, conditions: list[Condition]) -> Partition: pass @abc.abstractmethod def filter(self, condition: Condition) -> Dataset: pass @property @abc.abstractmethod def x( self, ) -> pd.DataFrame: pass @property @abc.abstractmethod def y( self, ) -> np.ndarray: pass @property @abc.abstractmethod def n( self, ) -> int: pass @property @abc.abstractmethod def types( self, ) -> list[ColumnType]: pass @property @abc.abstractmethod def types_dict( self, ) -> dict[ColumnID, ColumnType]: pass @property @abc.abstractmethod def columns( self, ) -> list[str]: pass @abc.abstractmethod def drop(self, columns: list[str]) -> Dataset: pass @abc.abstractmethod def values(self, column: str) -> np.ndarray: pass @abc.abstractmethod def unique_values(self, column: str, sorted: bool) -> np.ndarray: pass @abc.abstractmethod def classes(self) -> list: pass @abc.abstractmethod def filter_by_class(self, c) -> Dataset: pass @abc.abstractmethod def class_distribution(self, class_weight: np.ndarray) -> np.ndarray: pass @abc.abstractmethod def mean_x(self, col: ColumnID) -> float: pass @abc.abstractmethod def std_x(self, col: ColumnID, ddof=1) -> float: pass @abc.abstractmethod def mean_y( self, ) -> np.ndarray: pass @abc.abstractmethod def std_y(self) -> float: pass @abc.abstractmethod def count_class(self, klass: int) -> int: pass
class Model(abc.ABC): @abc.abstractmethod def predict_sample(self, x: InputSample): pass @abc.abstractmethod def output_size(self) -> int: pass @abc.abstractmethod def predict(self, x: Input): pass @abc.abstractmethod def pretty_print(self, class_names: list[str] | None = None) -> str: pass @abc.abstractmethod def complexity(self) -> int: pass class Trainer(abc.ABC): def fit(self, d: Dataset) -> Model: pass