我正在运行一些模型选择程序,基于对大约50个变量给出答案的人的43次调查.我已经将足够有用的变量缩小到22并丢弃其余变量.
我想使用R中leaps库中的详尽regsubsets算法进行模型选择.我设置nvmax = 22 - 我的集合中预测变量的数量 - regsubsets以速度吹走了我 - 只需几秒钟就可以运行2 ^ 22 ~4百万次回归.这不可能枚举22选择k的所有组合从1到22的所有k并且回归,可以吗?
regsubsets是否以某种方式进行了优化,以便"详尽"的算法可以巧妙地省略绝大多数回归,它可以知道先验相对于最佳可用的R ^ 2会有什么不好?
我发现当我运行lm(y~.x,data = some.df)时,这只需要25秒就可以进行10,000次回归 - 这与regsubsets分析400万次回归所用的3或4秒相差甚远 - 所以很明显在代码中有一些优化.如何实施优化?
我喜欢python日志记录基础设施,我想将它用于我运行的许多不同的夜间工作.很多这些工作使用模块X让我们说.我希望模块X的日志记录写入不依赖于模块X的日志文件,但是基于最终导致模块X中的调用功能的作业.
因此,如果在模块X中,Later_script_1.py调用foo(),我希望foo()的日志转到overnight_script_1.log.我还希望通过使用once_script_2.py调用foo()来登录later_script_2.log.
这个问题的一个潜在解决方案是基于查看sys.argv的第0个参数来设置日志文件,该参数可以映射到我的首选文件.以这种方式做事似乎很蠢.这样做有一个首选的设计模式吗?我不想根据调用函数的模块搜索不同的日志文件,以查找我的一个脚本的诊断信息.这是一些代码,因为我不确定我是否清楚自己.
这是script1.py
import X
import logging_utils as lu
import sys
logname=sys.argv[0][:-3] # logname==script1 with the .py cut off
logger=lu.setup_logger(log_name) # assume this does the formatting and sets the filehandlers
# furthermore assume the file handler is set so that the output goes to script1.log.
# do a bunch of thing
logger.info('I am doing a bunch of things in script1 and I will now call X.foo()')
X.foo() # see module X below
logger.info('I finished X.foo()')
Run Code Online (Sandbox Code Playgroud)
同样,这是script2.py
import X
import …Run Code Online (Sandbox Code Playgroud)