Statsmodels的Logit.fit_regularized永远运行

时间:2018-11-05 18:25:10

标签: python logistic-regression statsmodels

最近我一直在尝试对矢量化文本数据进行正则化Logistic回归。我首先尝试使用sklearn,没有问题,但是后来发现并且无法通过sklearn进行推理,因此我尝试切换到statsmodels。问题是,当我尝试安装logit时,它将永远运行并使用约95%的RAM(在8GB和16GB RAM计算机上都尝试过)。

我的第一个猜测是它与尺寸有关,因为我正在使用2960 x 43k矩阵。因此,为了减少它,我删除了bigrams并仅采样了100个观测值,这给了我100×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_train中的文本向量化。 然后我尝试:

import statsmodels.api as sm

logit=sm.Logit(y_train.values,X_train_vectorized.todense())
result=logit.fit_regularized(method='l1')

一切正常,直到result行一直持续运行为止。有什么我可以做的吗?如果我要进行统计推断,应该切换到R吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

几乎所有的stats模型和所有推论都是针对观察数比要素数大得多的情况而设计的。

Logit.fit_regularized使用带有scipy优化器的内部点算法,该算法需要将所有功能都保留在内存中。参数推论需要参数估计值的协方差,其形状为n_features乘n_features。设计该功能的用例是特征数量相对于观察数量相对较少,并且可以在内存中使用Hessian。

GLM.fit_regularized估计弹性净罚分参数并使用坐标下降。这可能可以处理大量功能,但没有任何可用的推论结果。

仅在最近的研究中才得出在套索和类似的惩罚之后选择变量的推论。例如,参见Python https://github.com/selective-inference/Python-software中的选择性推断,该案例也提供了R包。