Python PySpark:Logistic回归弹性网正则化
PySpark的逻辑回归接受Python PySpark:Logistic回归弹性网正则化,python,apache-spark,scikit-learn,pyspark,Python,Apache Spark,Scikit Learn,Pyspark,PySpark的逻辑回归接受elasticNetParam参数。如果我将这个参数设置为0.2,它意味着什么?它是指l1的0.2和l2的0.8,还是相反 此外,我一直在尝试使用sklearn重现PySpark的结果。为此,我使用sklearn的sgdclassizer 这是我正在初始化PySpark逻辑回归模型的参数字典 {'elasticNetParam': 0.41880231596887807, 'regParam': 0.05816730909769129, 'threshold':
elasticNetParam
参数。如果我将这个参数设置为0.2
,它意味着什么?它是指l1的0.2
和l2的0.8
,还是相反
此外,我一直在尝试使用sklearn重现PySpark的结果。为此,我使用sklearn的sgdclassizer
这是我正在初始化PySpark逻辑回归模型的参数字典
{'elasticNetParam': 0.41880231596887807,
'regParam': 0.05816730909769129,
'threshold': 0.4011073540317653,
'maxIter': 21.0}
这就是我用在sklearn的SGDClassizer上的
{'loss':'log',
'penalty':'elasticnet',
'l1_ratio':0.41880231596887807,
'alpha':0.05816730909769129,
'fit_intercept':True,
'max_iter':21*train_pandas.shape[0]}
这两个参数是等价的吗?或者我应该将l1_比率
更改为(1-0.41880231596887807)
关于max\u iter
,由于训练方法的不同,我考虑将它乘以行数。我知道我不会得到确切的结果,我正在寻找类似的结果。差值+/-0.01是可以接受的。但目前,差异约为-0.05,我希望能够弥补这一点。来自pyspark ml v2.1.0文档:
elasticNetParam=Param(parent='undefined',name='elasticNetParam',doc='ElasticNet混合参数,范围为[0,1]。对于alpha=0,惩罚为L2惩罚。对于alpha=1,惩罚为L1惩罚。)
因此,您应该将l1_比率
更改为(1-0.41880231596887807)
但即使如此,我认为pyspark和scikit learn之间可能会得到不同的结果,因为其随机状态
和解算器
参数。来自pyspark ml v2.1.0文档:
elasticNetParam=Param(parent='undefined',name='elasticNetParam',doc='ElasticNet混合参数,范围为[0,1]。对于alpha=0,惩罚为L2惩罚。对于alpha=1,惩罚为L1惩罚。)
因此,您应该将l1_比率
更改为(1-0.41880231596887807)
但即使如此,我认为pyspark和scikit learn可能会得到不同的结果,因为它的随机状态
和解算器
参数。您能进一步澄清吗?我想知道elasticNetParam是否必须为0或1,或者它可以取介于两者之间的值?它可以取介于两者之间的值。如果alpha=0,则为L2惩罚(岭回归)。如果alpha=1,则为L1惩罚(套索回归)。如果0