Skip to content

Feature selection

CoreSelector

Bases: abc.ABC

Template for feature selection methods

Source code in autorad/feature_selection/selector.py
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class CoreSelector(abc.ABC):
    """Template for feature selection methods"""

    def __init__(self):
        self._selected_features: list[str] | None = None

    @abc.abstractmethod
    def fit(self, X: pd.DataFrame, y: pd.Series) -> list[int]:
        """fit method should update self.selected_columns.
        If no features are selected, it should raise
        NoFeaturesSelectedError.
        """
        pass

    def fit_transform(self, X: pd.DataFrame, y: pd.Series) -> pd.DataFrame:
        self.fit(X, y)
        return self.transform(X, y)

    def transform(
        self, X: pd.DataFrame, y: pd.Series | None = None
    ) -> pd.DataFrame:
        return X[self.selected_features]

    @property
    def selected_features(self):
        if self._selected_features is None:
            raise ValueError(
                "No features selected!" "Call fit() first before transforming."
            )
        return self._selected_features

fit(X, y) abstractmethod

fit method should update self.selected_columns. If no features are selected, it should raise NoFeaturesSelectedError.

Source code in autorad/feature_selection/selector.py
28
29
30
31
32
33
34
@abc.abstractmethod
def fit(self, X: pd.DataFrame, y: pd.Series) -> list[int]:
    """fit method should update self.selected_columns.
    If no features are selected, it should raise
    NoFeaturesSelectedError.
    """
    pass

FailoverSelectorWrapper

Bases: CoreSelector

Wrapper for FeatureSelectors which doesn't raise 'NoFeaturesSelectedError' but instead returns all features.

Source code in autorad/feature_selection/selector.py
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
class FailoverSelectorWrapper(CoreSelector):
    """
    Wrapper for FeatureSelectors which doesn't raise 'NoFeaturesSelectedError'
    but instead returns all features.
    """

    def __init__(self, selector):
        self.selector = selector
        super().__init__()

    def fit(self, X, y):
        try:
            self.selector.fit(X, y)
            self._selected_features = self.selector._selected_features
        except ValueError:
            self._selected_features = X.columns.tolist()