首页 文章

覆盖要在sklearn上下文中使用的statsmodels GLM中的predict()

提问于
浏览
0

要在sklearn的上下文中使用statsmodel的Poisson GLM模型,我正在尝试 Build 一个自己的模型,它继承自GLM,BaseEstimator和RegressorMixin . 我的目标是做交叉验证之类的东西 . 这是我的代码:

import statsmodels.api as sm
from sklearn.base import BaseEstimator, RegressorMixin

class GLM_sklearn(sm.GLM, BaseEstimator, RegressorMixin):
    def __init__(self, X, y, family=sm.families.Poisson()):
        super().__init__(y, X, family=family)

    def fit(self, **kwargs):
        self.results_ = super().fit()

        self.coef_ = self.results_.params.values
        self.bse_ = self.results_.bse.values

        return self

    def predict(self, X, **kwargs):
        return self.results_.predict(X)

fit方法工作正常,但我有覆盖predict()的问题 . 预测我需要结果实例的预测方法(GLMResultsWrapper) . 所以我想覆盖GLM.predict方法(它有另一个功能) . 在代码中尝试我得到预期的错误:

predict_results = self.model.predict(self.params,exog,* args,** kwargs)TypeError:predict()接受2个位置参数,但给出3个

是否有可能“完全”覆盖预测方法?

1 回答

  • 1

    可能希望GLM_sklearn拥有sm.GLM和RegressorMixin的实例,并且只从BaseEstimator继承,而不是继承所有三个可能会导致问题,例如一个父类覆盖另一个成员 . 然后,您可以实现拟合并预测您想要的而不必担心父类的成员 .

相关问题