【问题标题】:PySpark: Logistic Regression Elastic Net RegularizationPySpark:逻辑回归弹性网络正则化
【发布时间】:2018-06-11 16:21:02
【问题描述】:

PySpark 的逻辑回归接受 elasticNetParam 参数。如果我将此参数设置为0.2,这是什么意思?是指0.2l10.8l2 还是相反?

另外,我一直在尝试使用 sklearn 重现 PySpark 的结果。为此,我使用了来自 sklearn 的 SGDClassifier

这是我用来初始化 PySpark 逻辑回归模型的参数字典

{'elasticNetParam': 0.41880231596887807, 
'regParam': 0.05816730909769129, 
'threshold': 0.4011073540317653,
'maxIter': 21.0}

这就是我用于 sklearn 的 SGDClassifier 的东西

{'loss':'log',
'penalty':'elasticnet', 
'l1_ratio':0.41880231596887807, 
'alpha':0.05816730909769129, 
'fit_intercept':True, 
'max_iter':21*train_pandas.shape[0]}

这两个参数字典是否等效?或者我应该将l1_ratio 更改为(1-0.41880231596887807)

关于max_iter,由于训练方法的不同,我想到了乘以行数。我知道我不会得到确切的结果,我正在寻找类似的结果。 +/- 0.01 的差异是可以接受的。但目前,差异约为 -0.05,我正在寻求弥补这一点。

【问题讨论】:

    标签: python apache-spark scikit-learn pyspark


    【解决方案1】:

    来自 pyspark ml v2.1.0 文档:

    elasticNetParam = Param(parent='undefined', name='elasticNetParam', doc='ElasticNet混合参数,范围[0, 1]。对于alpha = 0,惩罚是L2惩罚。对于 alpha = 1,这是 L1 惩罚。')

    因此,您应该将l1_ratio 更改为(1-0.41880231596887807)

    但即便如此,我认为您可能会在 pyspark 和 scikit-learn 之间得到不同的结果,因为它的 random_statesolver 参数。

    【讨论】:

    • 你能澄清更多吗?我想知道 elasticNetParam 是否必须为 0 或 1,或者它可以在两者之间取值?
    • 它可以在两者之间取值。如果 alpha = 0,则为 L2 惩罚(岭回归)。如果 alpha = 1,则为 L1 惩罚(Lasso 回归)。如果 0
    猜你喜欢
    • 2021-05-05
    • 2020-10-11
    • 1970-01-01
    • 2013-11-18
    • 2013-03-15
    • 2021-11-10
    • 2021-04-10
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多