繁体   English   中英

统计模型中的逻辑回归拟合和正则化缓慢

[英]Logistic regression in statsmodels fitting and regularizing slowly

我已经根据论坛中的几组评论数据构建了逻辑回归分类器,但是该模型需要花费很多时间才能收敛(14-16小时)。 我需要statsmodels的输出来显示模型的拟合优度,因此不幸的是,不能使用sklearn 这个帖子有与我相似的挑战,但没有解决方案。 我不确定这对于统计数据SO是否是一个更好的问题,但是与我最相似的问题已发布在这里!

模型详细信息:大约有100,000个注释/示例和5000个功能。 特征空间是数据集中的前n个单词,已归一化(如果您熟悉,则为TF-IDF)。 因此,功能集非常稀疏。 我正在使用一个密集矩阵来表示这一点。

我测试了一个模型,该模型具有1000个样本x 1000个特征,并且可以在1-2秒内拟合并保证其可靠性,因此花16个小时以上的时间进行正则化似乎是极端的。 sklearn ,全部功能和样本集将在约10秒内完成拟合/调整。

这是我正在使用的代码:

#X_train, X_test, y_train, y_test are from sklearn's train_test_split function. 
#X_train is features for training data, Y_train are the classes, etc.
#these are all scipy dense matrices

#add constants to the feature set
sm.add_constant(X_train, prepend = True)
sm.add_constant(X_test, prepend = True)

#assign alpha
a_base = 1
alpha = a_base * np.ones(X_train.shape[1], dtype=np.float64)
alpha[0] = 0 #don't penalize the last value which is our intercept

#fit and regularize
logit = sm.Logit(y_train, X_train)
results=logit.fit_regularized(method="l1_cvxopt_cp", alpha=alpha, disp=True)

如果有用的话,很高兴提供更多代码和详细信息!

实施拟合优度

您可以使用Pearson拟合优度统计量Deviance统计量来轻松实现此目的。

皮尔逊拟合优度统计

$$ X ^ 2 = \\ sum_ {i} \\ frac {(O_i-E_i)^ 2} {E_i} $$

偏差统计

$$ G ^ 2 = 2 \\ sum_ {I} O_i \\日志(\\压裂{O_i} {E_i})$$

在这种情况下,您观察到的数据将是一组标记数据,您的期望将是模型所预测的。 我将留给您实施,但是对于100,000个样本(如果您标记了这么多),它肯定不会花费14-16小时。 获得统计值后,您可以根据测试统计量,自由度和所需的置信度来运行卡方检验。 或者,您可以省略置信度,而仅使用结果的p值来告诉您模型的拟合程度。

为什么不应该使用“适合度”

现在说了这么多,我真的不喜欢为模型使用单个“拟合优度”的想法。 每个问题都是不同的,并且应该真正利用大量指标中的任何一个来分析其在特定预测任务上的实际效果。 出于这个原因,sklearn为您提供了许多实现此目的的方法。 花一些时间查看sklearn.metrics类以及“ 模型评估”的文档部分。 这正是sklearn所实现的,而有关该主题的文献很少。 这是一个密集的话题,可能会导致您陷入一个非常黑暗的兔子洞,并导致团队成员或其他研究人员之间展开激烈的辩论。

重要的是要了解您的模型实际试图捕获和预测的内容。 成功和失败的范围实际上是什么样的? 一旦您完全了解了这一点,便可以确定一种“准确性”的度量,以一种智能的方式捕获该度量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM