gpt4 book ai didi

python - 在 sklearn pipeline 中为模型实现自定义 .fit() 方法

转载 作者:行者123 更新时间:2023-12-01 08:00:30 27 4
gpt4 key购买 nike

我正在使用多个管道在交叉验证中进行比较。作为基准模型,我想包括一个简单的模型,它始终使用相同的固定系数,因此不依赖于训练数据。为了获得我想要的模型,我决定继承 sklearns 线性模型的所有行为并实现我自己的 .fit() 方法,该方法实际上不查看训练数据,而是始终使用存储的模型。

当使用我的自定义实现作为模型时,它工作正常,但是,作为管道的一部分,我得到一个 NotFittedError

创建我的简单基准模型并存储它:

import numpy as np
import pickle
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline

X = np.array([[1],[2],[3]])
y = [10,20,30]

model = LinearRegression(fit_intercept=False).fit(X,y)
pickle.dump(model, open('benchmark_model.txt', 'wb'))
print (model.coef_)

[10.]

定义我自己的 benchmark_model() ,它实现自定义拟合方法。 fit方法打开存储的模型

class benchmark_model(LinearRegression):
def fit(self, X, y = None):
self = pickle.load(open('benchmark_model.txt', 'rb'))
return self

在不同数据上测试自定义拟合实现作为模型似乎进展顺利。

X=np.array([[1],[2],[3]])
y=[5,10,15]

model = benchmark_model()
model = model.fit(X,y)

print (model.coef_)
print (model.predict(X))

[10.] [10. 20. 30.]

现在,我首先使用普通的 LinearRegression 作为管道的一部分,这似乎按预期进行:

pipe = Pipeline([('model',LinearRegression())])
pipe.fit(X,y).predict(X)

array([ 5., 10., 15.])

但是,当我使用自定义基准模型作为管道的一部分时,它不再起作用。

pipe = Pipeline([('model',benchmark_model())])
pipe.fit(X,y).predict(X)

NotFittedError: This benchmark_model instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

最佳答案

我假设当 benchmark_model.fit() 返回类 LinearRegression 而不是 benchmark_model 的实例时,管道会感到困惑。如果我们只是从固定模型中复制学习到的参数,这似乎是可行的:

class benchmark_model(LinearRegression):
def fit(self, X, y = None):
fixed_model = pickle.load(open('benchmark_model.txt', 'rb'))
self.coef_ = fixed_model.coef_
self.intercept_ = fixed_model.intercept_
return self

现在 fit 实际上返回 benchmark_model 的实例。

关于python - 在 sklearn pipeline 中为模型实现自定义 .fit() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55758784/

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