在StatsModels(和scikit-learn等其他库)中,我们首先要创建一个模型:
model = sm.OLS(y, x)
然后适合它:
results = model.fit()
为什么这两个单独的步骤?
fit
是一个单独的方法的主要原因可以从fit
的论据中看出。我们只创建一次特定模型但我们可能想要或者我们可能需要多次调用fit
。
一个例子是优化中的问题,我们需要在达到收敛之前尝试不同的优化器或起始值,或者意识到模型不适合于数据并且不存在常规的最优值。
作为fit
参数可用的另一个选项是不同的cov_type
s,这些是用于计算参数估计的标准误差的不同方法。
另一个原因是几个模型现在有几种fit
方法,这些方法不能通过常规的fit
方法获得。例子是用于惩罚估计的fit_regularized
和用于参数线性约束下的估计的fit_constrained
。在这些模型中,我们不需要调用通常的fit
方法。
更一般的问题:为什么statsmodels使用这个复杂的类层次结构和多种方法而不是将所有内容放在函数中?
主要原因是模块化,代码可重用性和惰性评估。
fit()
是表示模型的类的方法。首先从类中创建一个对象(这里是sm.OLS
),然后从该类调用方法fit()
。
该课程经常有其他方法,如score
,predict
,...