Я работаю над реализацией логистической регрессии в Pyspark, которая в настоящее время написана в SAS с использованием proc surveylogistic
. Внедрение SAS позволяет учесть сложный дизайн обследования, включающий веса кластеров / слоев / выборки.
Есть несколько способов, как минимум, получить модель в Python: например, я смог получить точное совпадение как коэффициентов, так и стандартных ошибок, используя пакет statsmodels
из этого исследовательского проекта на Github.
Однако мои данные большие, поэтому я хотел бы воспользоваться распределенными возможностями Spark через пакет MLLIB. Например, текущая настройка для запуска logit в Spark:
import pyspark.ml.feature as ft
featuresCreator = ft.VectorAssembler(
inputCols = X_features_list,
outputCol = "features")
glm_binomial = GeneralizedLinearRegression(family="binomial", link="logit", maxIter=25, regParam = 0,
labelCol='df',
weightCol='wgt_panel')
from pyspark.ml import Pipeline
pipeline = Pipeline(stages=[featuresCreator, glm_binomial])
model = pipeline.fit(encoded_df_nonan)
«weightcol» работает только для простых выборочных весов, но мне интересно, знает ли кто-нибудь о способе реализации более сложной схемы взвешивания в Spark (обратите внимание, что приведенное выше будет соответствовать логистической процедуре, а не обзорной логистике) ). Для сравнения, метод, использованный для расчета ковариационной матрицы в опросе: здесь .