PySpark: логистическая регрессия упругая чистая регуляризация - PullRequest
0 голосов
/ 11 июня 2018

Логистическая регрессия PySpark принимает параметр elasticNetParam.Если я установлю этот параметр, скажем, 0.2, что это значит?Означает ли это 0.2 из l1 и 0.8 из l2 или наоборот?

Кроме того, я пытался воспроизвести результаты PySpark с помощью sklearn.Для этого я использую SGDClassifier от sklearn.

Это словарь параметров. Я инициализирую модель логистической регрессии PySpark с помощью

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

И это то, что я использую для SGDClassifier sklearn

{'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, и я собираюсь это преодолеть.

1 Ответ

0 голосов
/ 11 июня 2018

Из документации pyspark ml v2.1.0:

asticNetParam = Param (parent = 'undefined', name ='asticNetParam ', doc =' параметр смешивания ElasticNet, в диапазоне [0,1]. Для альфа = 0 штраф составляет штраф L2. Для альфа = 1 это штраф L1. ')

Поэтому вам следует изменить l1_ratioна (1-0.41880231596887807).

Но даже тогда, я думаю, вы можете получить разные результаты между pyspark и scikit-learn из-за его параметров random_state и solver.

...