作为管道步骤的孤立点的检测和去除 [英] Detect and Remove Outliers as step of a Pipeline

查看:0
本文介绍了作为管道步骤的孤立点的检测和去除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了一个问题,我正在尝试构建我自己的类以放入到python中的管道中,但它不起作用。

我尝试解决的问题是一个多类分类问题。

我要做的是在管道中添加一个步骤来检测和删除离群值。 我发现这个detect and remove outliers in pipeline python与我所做的非常相似。 这是我的班级:

from sklearn.neighbors import LocalOutlierFactor
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np

class OutlierExtraction(BaseEstimator, TransformerMixin):
    def __init__(self, **kwargs ):
        self.kwargs = kwargs

    def transform(self, X, y):
        """
            X should be of shape (n_samples, n_features)
            y should be of shape (n_samples,)
        """

        lof = LocalOutlierFactor(**self.kwargs)
        lof.fit(X)
        nof = lof.negative_outlier_factor_
        return X[nof > np.quantile(nof, 0.95), :], y[nof > np.quantile(nof, 0.95)]

    def fit(self, X, y = None):
        return self

但我收到此错误in fit_transform return self.fit(X, y, **fit_params).transform(X) TypeError: transform() missing 1 required positional argument: 'y'

以下代码是我用来调用此类的代码:

scaler = preprocessing.RobustScaler()
outlierExtractor = OutlierExtraction()
pca = PCA()
classfier = svm.SVC()

pipeline = [('scaler', scaler),
            ('outliers', outlierExtractor),
        ('reduce_dim', pca),
        ('classfier', classfier)]

pipe = Pipeline(pipeline)

params = {
    'reduce_dim__n_components': [5, 15],
    'classfier__kernel': ['rbf'],
    'classfier__gamma': [0.1],
    'classfier__C': [1],
    'classfier__decision_function_shape':['ovo']}

my_scoring = 'f1_macro'
n_folds = 5
gscv = GridSearchCV(pipe, param_grid=params, scoring=my_scoring, n_jobs=-1, cv=n_folds, refit=True)
gscv.fit(train_x, train_y)

推荐答案

错误是因为转换方法def transform(self, X, y)要求传入Xy,但无论调用它的是什么,都只是传递X。(我看不到它是从您的代码中的什么地方调用的,所以假设它是由底层库调用的)。

我不知道将y设置为可选(def transform(self, X, y=None)并修改您的方法在这种情况下是否有效。否则,您必须弄清楚如何让调用代码传递y,或者以另一种方式提供它。

我不熟悉这个库,但查看source code会发现transform()应该只接受一个参数X

        if y is None:
            # fit method of arity 1 (unsupervised transformation)
            return self.fit(X, **fit_params).transform(X)
        else:
            # fit method of arity 2 (supervised transformation)
            return self.fit(X, y, **fit_params).transform(X)

这篇关于作为管道步骤的孤立点的检测和去除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆