在StatsModels(以及其他类似scikit-learn的库)中,我们首先必须创建一个模型:
model = sm.OLS(y, x)
然后安装它:
results = model.fit()
这两个步骤为什么分开?
答案 0 :(得分:1)
从@RestController
@Validated
public class Ctrl {
// ...
@GetMapping("/{id}")
public String getById(@Pattern(regexp = REGEXP) @PathVariable String id) {
return someObjectService.getById(UUID.fromString(id)));
}
}
中的参数可以看出fit
是独立方法的主要原因。我们只创建一次特定的模型一次,但是我们可能想要或者可能不得不多次调用fit
。
一个例子是优化中的问题,我们需要在达到收敛之前尝试使用不同的优化器或初始值,或者意识到该模型不适用于数据,并且不存在常规的优化。
作为fit
参数可用的另一个选项是不同的fit
,它们是用于计算参数估计的标准误差的不同方法。
另一个原因是,几个模型现在具有几种cov_type
方法,这些方法无法通过常规fit
方法使用。例如fit
用于惩罚估计,fit_regularized
用于在参数线性约束下进行估计。在这些模型中,我们不需要调用常规的fit_constrained
方法。
更笼统的问题:为什么statsmodels使用这种复杂的类层次结构和大量方法,而不是将所有内容都放入函数中?
主要原因是模块化,代码可重用性和延迟评估。
答案 1 :(得分:0)
fit()
是表示模型的类的方法。首先,您从该类(此处为sm.OLS
创建一个对象,然后从该类中调用方法fit()
。
该类经常使用其他方法,例如score
,predict
,...