这可能是有史以来最基本的问题,但最近我试图更好地理解输入类似内容:
model = statsmodels.regression.linear_model.OLS(y, X).fit()
完全正确。试图理解基本原理,而不是去,如果我输入我可以拟合线性最小二乘回归模型,那么我只需要在每次需要时输入。所以现在我试图在更彻底的层面上理解它。所以我开始使用了?更多,我发现:
statsmodels是库
回归是ModuleWrapper
linear_model是模块
OLS是类型/类
fit是与OLS类型实例关联的方法
所以我的问题是这样,ModuleWrapper究竟是什么?我不敢相信我已经无法通过搜索找到答案了,对此抱歉,但是它可能就像它只是几个不同模块的包/包装一样简单吗?
感谢。
答案 0 :(得分:0)
regression
是包含多个模块的statsmodels的文件夹或子目录
定义OLS类的模块的完整文件路径是
...\statsmodels\regression\linear_model.py
但是,python不要求路径对应于实际的目录,文件或模块。
使用api导入import statsmodels.api
时,访问的python路径与磁盘上的文件不对应。
e.g。 statmodels\api.py
包含
from .genmod.api import families, cov_struct
和...\statsmodels\genmod\api.py
包含来自实际模块或子目录的导入
from . import families
from . import cov_struct
例如,我们可以使用api快捷方式访问Poisson系列,而定义类的实际模块具有不同的更长路径。
>>> import statsmodels.api as sm
>>> sm.families.Poisson
<class 'statsmodels.genmod.families.family.Poisson'>
>>> sm.families.Poisson.__module__
'statsmodels.genmod.families.family'
直接从包含Poisson系列代码的模块导入
>>> import statsmodels.genmod.families.family
>>> statsmodels.genmod.families.family.Poisson
<class 'statsmodels.genmod.families.family.Poisson'>
因此,路径中的名称有时会引用实际的文件路径,而在其他情况下,它是通过中间模块的间接导入,并不符合实际的目录结构。
简要说明statsmodels使用此双重导入结构的原因在http://www.statsmodels.org/devel/importpaths.html。