Python Statsmodels的Logit.fit\u正则化始终保持运行

Python Statsmodels的Logit.fit\u正则化始终保持运行,python,logistic-regression,statsmodels,Python,Logistic Regression,Statsmodels,最近我一直在尝试对向量化文本数据进行正则化逻辑回归拟合。我首先尝试使用sklearn,没有问题,但后来我发现,我无法通过sklearn进行推理,所以我尝试切换到statsmodels。问题是,当我尝试安装logit时,它会一直运行,并在8GB和16GB RAM计算机上使用我95%的RAM 我的第一个猜测是它与维度有关,因为我使用的是2960x43k矩阵。因此,为了减少它,我删除了bigrams,只取了100个观察值的样本,这给我留下了一个100 x 6984的矩阵,我认为这应该不会有太大的问题

最近我一直在尝试对向量化文本数据进行正则化逻辑回归拟合。我首先尝试使用sklearn,没有问题,但后来我发现,我无法通过sklearn进行推理,所以我尝试切换到statsmodels。问题是,当我尝试安装logit时,它会一直运行,并在8GB和16GB RAM计算机上使用我95%的RAM

我的第一个猜测是它与维度有关,因为我使用的是2960x43k矩阵。因此,为了减少它,我删除了bigrams,只取了100个观察值的样本,这给我留下了一个100 x 6984的矩阵,我认为这应该不会有太大的问题

这是我的代码的一个小示例:

for train_index, test_index in sss.split(df_modelo.Cuerpo, df_modelo.Dummy_genero):

   X_train, X_test = df_modelo.Cuerpo[train_index], df_modelo.Cuerpo[test_index]
   y_train, y_test = df_modelo.Dummy_genero[train_index], df_modelo.Dummy_genero[test_index]


cvectorizer=CountVectorizer(max_df=0.97, min_df=3, ngram_range=(1,1) )
vec=cvectorizer.fit(X_train)
X_train_vectorized = vec.transform(X_train)
这会给我一个序列和一个测试集,然后将X_序列中的文本矢量化。 然后我尝试:

import statsmodels.api as sm

logit=sm.Logit(y_train.values,X_train_vectorized.todense())
result=logit.fit_regularized(method='l1')
一切都很好,直到结果行,这将永远运行。有什么我能做的吗?如果我在寻找统计推断,我应该切换到R吗


提前谢谢

几乎所有的STATS模型和所有的推理都是针对观测数量远大于特征数量的情况设计的

Logit.fit_regulated使用一种带有scipy优化器的内点算法,该算法需要将所有特征保留在内存中。参数的推断需要参数估计的协方差,该参数估计具有形状n_特征和n_特征。设计它的用例是当特征的数量与观察的数量相比相对较少时,并且Hessian可以在内存中使用

GLM.fit_正则化估计弹性净惩罚参数并使用坐标下降。这可能会处理大量特征,但没有任何推断结果可用


在套索和类似的惩罚之后,选择变量的推论只有在最近的研究中才可用。请参见Python中的选择性推理示例,该示例还提供了一个R包。

答案很好,信息量也很丰富!我试着做一些类似于Wu,A.2017的事情。学术界的性别刻板印象:来自经济学就业市场谣言论坛的证据确实如此,所以我认为这会更容易。我会寻找你的链接,看看我能做什么!从吴的论文来看,她似乎没有在完整的套索模型上使用推理。在AFAICS中,她使用套索进行变量选择,但使用压缩数据,即她使用更大的类别,在这些类别中,我们对观察的数量几乎没有特征,用于推理问题。