【发布时间】:2016-03-30 15:11:17
【问题描述】:
我正在使用 python scikit-learn 库进行分类。
作为特征选择步骤,我想使用 RandomizedLogisticRegression()。
因此,为了通过交叉验证找到 C 的最佳值,我使用了 LogisticRegressionCV(penalty='l1', solver='liblinear')。 但是,在这种情况下,所有系数都为 0。 使用 l2 惩罚没有问题。此外,带有 l1 惩罚的 LogisticRegression() 单次运行似乎给出了适当的系数。
我正在使用 RandomizedLasso 和 LassoCV() 来解决问题,但我不确定将 LASSO 用于二进制类标签是否合适。
所以我的问题是这样的。
- 在我的情况下使用 LogisticRegressionCV() 是否有问题?
- 除了 GridSearchCV() 之外,还有其他方法可以为逻辑回归找到 C_ 的最佳值吗?
- 是否可以使用 LASSO 进行二元(非连续)分类?
【问题讨论】:
-
1) 所有系数都为零意味着您的 L1 先验强度太强。 2)您不必交叉验证,但您确实需要一个独立的测试集来调整 L1 惩罚的强度。交叉验证几乎总是优越的,那么为什么不简单地使用它呢? 3) 在权重上使用 L1 先验的逻辑回归正是如此。
-
@cel 非常感谢您的评论。但是很抱歉我不能理解一些观点,因为我不擅长统计。在问题 2 中,我认为在单独的测试集上使用单个 LogisticRegression 可能会导致过度拟合问题,但这是否足够?而在 3 中,L1 惩罚逻辑回归和 Lasso 回归似乎显示出很大差异,至少在 scikit-learn 中是这样。我认为这是因为 scikit-learn 中的套索回归将二进制类 0 和 1 作为连续值。有什么办法可以解决这个问题吗?
-
对于使用机器学习,对统计学有深刻的理解当然是有帮助的,但不是绝对必要的。但是你必须对训练/测试以及交叉验证的工作方式和原因有深入的了解。没有这些知识,你会犯很多错误。所以,如果你还没有,那就去读吧,读吧,读吧。一般来说:每当你调整参数时,你总是必须添加一个额外的独立评估层,否则你可能会遇到过度拟合。我不明白你对 lasso 和逻辑回归与 L1 惩罚的区别的问题。
-
你不会找到任何可以神奇地让一切变得简单的资源。一旦你理解了核心原则,公式就会变得更简单。阅读维基百科总是一个好的开始。尝试掌握概念,而不是公式。深入了解不仅需要您理解公式,还需要直观地了解这些公式背后的含义。即使对于更多技术领域的人来说,这也很困难。
-
@cel 感谢您的善意建议。我最好一步一步开始,用一些简单而小的数据集。
标签: python machine-learning scikit-learn