python - 二进制变量集的logit优化方法
问题描述
我正在寻求有关使用二进制变量的 statsmodel 实现 logit 模型的帮助。
这是我的代码:(我正在使用特征选择方法:Python 上可用的 MinimumRedundancyMaximumRelevance 和 RecursiveFeatureElimination)
for i_mrmr in range(4,20):
for i_rfe in range(3,i_mrmr):
regressors_step1 = I am selecting the MRMR features
regressors_step2 = I am selecting features from the previous list with RFE method
for method in ['newton', 'nm', 'bfgs', 'lbfgs', 'powell', 'cg', 'ncg']:
logit_model = Logit(y,X.loc[:,regressors_step2])
try:
result = logit_model.fit(method=method, cov_type='HC1')
print(result.summary)
except:
result = "error"
我正在使用来自 statsmodels.discrete.discrete_model.Logit 的 Logit。
y 变量,即目标,是二进制的。
所有解释变量 X 也是二进制的。
logit 模型适用于不同的优化方法。也就是说,我最终得到了一些要打印的摘要。尽管如此,仍会打印出各种警告,例如:“最大似然优化未能收敛”。
statsmodel 算法中提出的优化方法来自 scipy :
- 'newton' 代表 Newton-Raphson,'nm' 代表 Nelder-Mead
- Broyden-Fletcher-Goldfarb-Shanno (BFGS) 的“bfgs”
- 'lbfgs' 用于具有可选框约束的有限内存 BFGS
- 'powell' 表示修改后的 Powell 方法
- 'cg' 共轭梯度
- 'ncg' 表示牛顿共轭梯度我们可以在 scipy.optimize 上找到这些方法。
这是我的问题:
我没有发现任何反对将这些优化方法用于二进制变量集的论据。但是,由于这些警告,我问自己这样做是否正确。然后,最好的方法是什么,在这种情况下更合适的方法是什么?
这里:Scipy 最小化:如何将 x 限制为 0 和 1?隐含地说,在二进制变量集的情况下,Python MIP(混合整数线性规划)类型的模型可能会更好。在 python 的 MIP 包的文档中,似乎要实现这种模型,我应该明确地给出一个函数来最小化或最大化,并且我应该表达约束......(参见:https://docs.python-mip .com/en/latest/quickstart.html#creating-models)
因此我想知道是否需要将 logit 函数定义为目标函数?我应该表达什么约束?有没有更简单的方法?
解决方案
推荐阅读
- php - php中的非法字符串偏移(Laravel 5.1)
- javascript - 使 ScrollView - 项目使用整个屏幕的百分比大小
- jsf - TextEditor 组件被标记为 secure='true' 但在类路径中找不到 HTML Sanitizer
- telegram - 从电报到我的服务器的传入流量握手失败 40
- jquery - 如何选择不隐藏的div中的输入元素?
- centos - 从 rpm 文件递归下载所有依赖项
- java - SpringBoot:在 RestController 响应中展开子对象
- deep-learning - 带有单词输入的基于 CNN 的回归
- botframework - 如何将自定义身份验证服务器与机器人框架一起使用?
- r - tidyr Pivot-wider:重复问题