首页 > 解决方案 > 二进制变量集的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 :

这是我的问题:

我没有发现任何反对将这些优化方法用于二进制变量集的论据。但是,由于这些警告,我问自己这样做是否正确。然后,最好的方法是什么,在这种情况下更合适的方法是什么?

这里:Scipy 最小化:如何将 x 限制为 0 和 1?隐含地说,在二进制变量集的情况下,Python MIP(混合整数线性规划)类型的模型可能会更好。在 python 的 MIP 包的文档中,似乎要实现这种模型,我应该明确地给出一个函数来最小化或最大化,并且我应该表达约束......(参见:https://docs.python-mip .com/en/latest/quickstart.html#creating-models

因此我想知道是否需要将 logit 函数定义为目标函数?我应该表达什么约束?有没有更简单的方法?

标签: pythonoptimizationscipybinarymodeling

解决方案


推荐阅读