gpt4 book ai didi

python - 检测和删除异常值作为管道的一个步骤

转载 作者:行者123 更新时间:2023-12-04 02:33:44 26 4
gpt4 key购买 nike

我有一个问题,我正在尝试构建自己的类以放入 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)

最佳答案

@TimCroydon 说得对:sklearn 目前假设转换器只转换它们的自变量。关于如何最好地放松这一点已经进行了一些长时间的讨论:

scikit-learn-contribimbalanced-learn 支持多种重采样器,效果相似但上下文不同;您也许可以使用它,但在删除异常值时,fit_sample 可能看起来有点奇怪。无论如何,他们有一个自定义版本的 Pipeline 可以优雅地处理重新采样。

最后,您也许可以在您的自定义类中重写 fit_transform 方法。似乎它应该适用于这种情况,尽管它可能会在其他地方引起问题。

关于python - 检测和删除异常值作为管道的一个步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62819600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com