Жесткий код модели искровой логистической регрессии - PullRequest
0 голосов
/ 25 июня 2018

Я обучил модель с использованием PySpark и хотел бы сравнить ее производительность с существующей эвристикой.

Я просто хочу жестко закодировать модель LR с коэффициентами 0.1, 0.5 и 0.7, вызвать .transform на тестовых данных, чтобы получить прогнозы, и вычислить погрешности.

Как мне жестко закодировать модель?

1 Ответ

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

К сожалению, невозможно просто установить коэффициенты модели LR pyspark.Модель pyspark LR на самом деле является оберткой вокруг модели java ml (см. Класс JavaEstimator).

Таким образом, когда модель LR подходит, она передает параметры из paramMap в новый оценщик Java, который подходит для данных.Все методы / атрибуты LogisticRegressionModel являются просто вызовами модели Java с использованием метода _call_java.

Поскольку коэффициенты не являются параметрами (вы можете увидеть полный список, используя explainParams в экземпляре LR), вы не можете передать их созданной модели Java LR, и нет метода установки.

Например, для модели логистической регрессии lrm, вы можете видеть, что единственными установщиками являютсядля параметров, которые вы можете установить при создании экземпляра экземпляра LR pyspark: lowerBoundsOnCoefficients и upperBoundsOnCoefficients.

print([c for c in lmr._java_obj.__dir__() if "coefficient" in c.lower()])
# >>> ['coefficientMatrix', 'lowerBoundsOnCoefficients',
# 'org$apache$spark$ml$classification$LogisticRegressionParams$_setter_$lowerBoundsOnCoefficients_$eq',
# 'getLowerBoundsOnCoefficients',
# 'org$apache$spark$ml$classification$LogisticRegressionParams$_setter_$upperBoundsOnCoefficients_$eq',
# 'getUpperBoundsOnCoefficients', 'upperBoundsOnCoefficients', 'coefficients',
# 'org$apache$spark$ml$classification$LogisticRegressionModel$$_coefficients']

Попытка установить атрибут «coefficients» приводит к следующему:

print(lmr.coefficients)
# >>> DenseVector([18.9303, -18.9303])
lmr.coefficients = [10, -10]
# >>> AttributeError: can't set attribute

Таким образом, вам придется свернуть свой собственный преобразователь pyspark, если вы хотите иметь возможность предоставлять коэффициенты.Вероятно, было бы проще просто рассчитать результаты, используя стандартную логистическую функцию согласно комментарию @ pault.

...