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