【问题标题】:problem with alpha and lambda regularization parameters in pythonpython中的alpha和lambda正则化参数的问题
【发布时间】:2019-02-05 10:28:09
【问题描述】:

问题: Logistic Regression 使用 alpha = 0.1 训练 L1 正则化和 L2 正则化的逻辑回归模型 和 lambda = 0.1。报告准确率、精确度、召回率、f1 分数并打印混淆矩阵

我的代码是:

_lambda = 0.1
c = 1/_lambda
classifier = LogisticRegression(penalty='l1',C=c)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

我不知道 alpha 和 lambda 的真正位置在哪里。 我做得对吗?

【问题讨论】:

  • 您可以print(classifier.C) 检索用于训练模型的1/_lambda 的值。那就是正则化参数。这里没有其他alpha 设置。正则化的alpha 设置仅用于SGDClassifier
  • 不能同时放l1和l2归一化参数。它是一个或另一个,否则你必须做一个弹性网络正则化,然后它是 SGDClassifier( 用弹性网络惩罚实现逻辑回归 (SGDClassifier(loss="log", 惩罚="elasticnet")))
  • 嘿@Alexis,SGDClassifier 有 Lambda 和 Alpha 参数吗?
  • 是的,它同时使用它们。来自 doc:正则化器是添加到损失函数的惩罚,它使用平方欧几里德范数 L2 或绝对范数 L1 或两者的组合(弹性网络)将模型参数缩小到零向量。尝试使用它,但在这样做之前阅读了很多。正如答案中提到的,如果您不了解自己在做什么,您将一事无成。

标签: python pandas scikit-learn


【解决方案1】:

你的例子

alpha=0, lambda=10 (AKA .1/1)

阿尔法

alpha 是为控制过度拟合的特征数量添加惩罚的参数,在本例中为 L1(Lasso 回归)或 L2(Ridge 回归)。 L1 和 L2 惩罚不能同时进行,因为只有一个 Lambda 系数。顺便说一下 - Elastic Net 是一个介于 L1 和 L2 之间的 alpha 参数,因此例如,如果您使用 sklearn.SGD_Regressor() alpha=0 是 L1 alpha=0.5 是 elasticnet,alpha=1 是 Ridge。

拉姆达

是一个控制学习率的术语。换句话说,您希望模型在每次学习迭代期间做出多少改变。

混乱

更糟糕的是,这些术语经常互换使用,我认为是由于图论、统计理论、数学理论以及编写常用机器学习库的个人中的不同但相似的概念

在此处查看一些信息:https://www.analyticsvidhya.com/blog/2016/01/complete-tutorial-ridge-lasso-regression-python/,还可以查找一些关于统计学习的免费学术教科书。

【讨论】:

  • 感谢您的帖子,但我同时需要 alpha 和 lambda。有可能吗?有什么办法?
  • 我帖子的第一行告诉你你使用的 alpha 和 lambda 的值。如果你想要 lambda = .1。然后只需设置 C=0.1
  • 谢谢。我想同时更改代码中的 alpha,可以吗?
  • 不带sklearn LogisticRegression,正如上面@Alexis所说,可以在SGDClassifier(loss='log')中指定这个参数。但是,请花一些时间阅读链接的源代码、观看一些视频等。如果您想在现实世界中使用机器学习,了解这些术语背后的含义至关重要。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2010-11-22
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多