Могу ли я добавить обнаружение и удаление выбросов в Scikit learn Pipeline? - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу создать конвейер в Scikit-Learn с определенным этапом, состоящим в обнаружении и удалении выбросов, позволяющем передавать преобразованные данные другим преобразователям и оценщику.

Я искал SE, но нигде не могу найти этот ответ. Это возможно?

1 Ответ

0 голосов
/ 15 сентября 2018

Да.Подкласс TransformerMixin и создайте пользовательский трансформатор.Вот расширение одного из существующих методов обнаружения выбросов:

from sklearn.pipeline import Pipeline, TransformerMixin
from sklearn.neighbors import LocalOutlierFactor

class OutlierExtractor(TransformerMixin):
    def __init__(self, **kwargs):
        """
        Create a transformer to remove outliers. A threshold is set for selection
        criteria, and further arguments are passed to the LocalOutlierFactor class

        Keyword Args:
            neg_conf_val (float): The threshold for excluding samples with a lower
               negative outlier factor.

        Returns:
            object: to be used as a transformer method as part of Pipeline()
        """
        try:
            self.threshold = kwargs.pop('neg_conf_val')
        except KeyError:
            self.threshold = -10.0
        pass
        self.kwargs = kwargs

    def transform(self, X):
        """
        Uses LocalOutlierFactor class to subselect data based on some threshold

        Returns:
            ndarray: subsampled data

        Notes:
            X should be of shape (n_samples, n_features)
        """
        x = np.asarray(X)
        lcf = LocalOutlierFactor(**self.kwargs)
        lcf.fit(X)
        return x[lcf.negative_outlier_factor_ > self.threshold, :]

    def fit(self, *args, **kwargs):
        return self

Затем создайте конвейер как:

pipe = Pipeline([('outliers', OutlierExtraction()), ...])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...