sklearn线性回归管道可以在输出变量上设置最大上限吗?

我的scikit学习管道是线性回归,但是我的问题域永远都不应允许输出高于某个特定值,因此我想限制输出。我知道我可以先运行我的模型,然后执行y = np.where(y > MAX_VALUE,MAX_VALUE,y),但是我可能还要执行更多类似的自定义逻辑步骤,因此我想将其封装到管道中。 sklearn可以做到吗?

我尝试编写自己的自定义估算器,如下所示,该错误给出了All intermediate steps should be transformers and implement fit and transform or be the string 'passthrough',因此管道似乎不允许在LinearRegression步骤之后加上步骤。有办法吗?

import sklearn.base

class ClipoutputToMaxValue(sklearn.base.BaseEstimator,sklearn.base.RegressorMixin):
    '''custom step to put a ceiling on the output 'y' value```
    def fit(self,X,y):
        self.max_y = y.max()
        return self

    def predict(self,y):
        y = np.where(y > self.max_y,self.max_y,y)
        return y

model =  sklearn.pipeline.Pipeline(
        [('scaler',sklearn.preprocessing.StandardScaler()),('model',sklearn.linear_model.LinearRegression()),('clipper',ClipoutputToMaxValue()) #THIS IS WHAT I WANT BUT
         #SKLEARN DOEsn'T ALLOW ME TO DO THIS
        ])

x = np.arange(10).reshape(10,-1)
y = x
model.fit(x,y)
model.predict(x)

但是由于以下错误而失败: TypeError: All intermediate steps should be transformers and implement fit and transform or be the string 'passthrough' 'LinearRegression(copy_X=True,fit_intercept=True,n_jobs=None,normalize=False)' (type <class 'sklearn.linear_model.base.LinearRegression'>) doesn't

还有其他方法吗?

amzonpb365 回答:sklearn线性回归管道可以在输出变量上设置最大上限吗?

这里的问题仅仅是因为管道必须仅具有带有fit和transform方法的中间步骤,最后一步除外,该步骤必须是管道称为.fit方法的最终模型。

从此处:

[https://scikit-learn.org/stable/modules/generation/sklearn.pipeline.Pipeline.html?highlight=pipeline#sklearn.pipeline.Pipeline] [管道]

“依次应用一个转换列表和一个最终估计器。管道的中间步骤必须是“转换”,即它们必须实现拟合和转换方法。最终估计器仅需要实现拟合。可以使用memory参数来缓存管道。”

因此,在您的情况下,您正在应用LinearRegression,它没有实现transform方法()

本文链接:https://www.f2er.com/3127274.html

大家都在问