StatsModels:为什么我们必须拟合模型?

StatsModels: Why do we have to fit a model?

在 StatsModels(以及 scikit-learn 等其他库)中,我们首先必须创建一个模型:

model = sm.OLS(y, x)

然后装上:

results = model.fit()

为什么这两个步骤是分开的?

fit()是代表模型的class的一个方法。首先从 class(这里是 sm.OLS)创建一个对象,然后从 class 调用方法 fit()

class 经常有其他方法,例如 scorepredict、...

之所以fit是一个单独的方法,主要可以从fit中的参数看出。我们只创建了一个特定的模型一次,但我们可能想要或者我们可能不得不多次调用 fit

一个例子是优化问题,我们需要在达到收敛之前尝试不同的优化器或起始值,或者意识到模型不适合数据并且不存在常规最优值。

作为 fit 参数可用的另一个选项是不同的 cov_types,它们是计算参数估计标准误差的不同方法。

另一个原因是,一些模型现在有几种 fit 方法,这些方法无法通过常规 fit 方法获得。例如 fit_regularized 用于惩罚估计,fit_constrained 用于参数线性约束下的估计。在这些模型中,我们不需要调用通常的 fit 方法。

更一般的问题:为什么 statsmodels 使用这种复杂的 class 层次结构和大量方法而不是将所有内容都放在函数中?

主要原因是模块化、代码可重用性和惰性求值。