Отсутствие сводки моделей для GLM в Pyspark / SparkML

В данный момент я знакомлюсь с Pyspark и SparkML. Для этого я использую титанический набор данных, чтобы обучить GLM предсказывать «стоимость проезда» в этом наборе данных.

Я внимательно слежу за документацией Spark. У меня есть рабочая модель (которую я называю glm_fare), но когда я пытаюсь оценить обученную модель с помощью summary, я получаю следующее сообщение об ошибке:

RuntimeError: для этой GeneralizedLinearRegressionModel нет сводки по обучению

Почему это?

Код для обучения был таким:

glm_fare = GeneralizedLinearRegression(
            labelCol="Fare", 
            featuresCol="features", 
            predictionCol='prediction',
            family='gamma',
            link='log',
            weightCol='wght',
            maxIter=20
            )
    glm_fit = glm_fare.fit(training_df)

    glm_fit.summary

person GluonCollision    schedule 24.09.2019    source источник


Ответы (2)


На всякий случай, если кто-то столкнется с этим вопросом, я тоже столкнулся с этой проблемой, и кажется, что эта ошибка возникает, когда матрица Гессе необратима. Эта матрица используется для максимизации вероятности оценки коэффициентов.

Матрица необратима, если одно из собственных значений равно 0, что происходит, когда в ваших переменных присутствует мультиколлинеарность. Это означает, что одну из переменных можно предсказать с помощью линейной комбинации других переменных. Следовательно, влияние каждой из переменных не может быть идентифицировано с какой-либо значимостью.

Возможное решение - найти переменные, которые (мульти) коллинеарны, и удалить одну из них из регрессии. Однако обратите внимание, что мультиколлинеарность является проблемой только в том случае, если вы хотите интерпретировать коэффициенты, а не когда модель используется для прогнозирования.

person hello123    schedule 04.05.2020

Это задокументировано, возможно, summary не может быть доступно для модели в GeneralizedLinearRegressionModel docs.

Однако вы можете выполнить первоначальную проверку, чтобы избежать ошибки:

glm_fit.hasSummary(), который является общедоступным логическим методом. Используя это как

if glm_fit.hasSummary():
    print(glm_fit.summary)

Вот прямое подобие Исходный код Pyspark и Исходный код класса GeneralizedLinearRegressionTrainingSummary и где ошибка

person pissall    schedule 24.09.2019
comment
Привет @pissall, спасибо за ответ - я тоже видел это в документации. Есть ли где-нибудь хорошая документация о доступности резюме? Для меня это пока не очень очевидно ... - person GluonCollision; 24.09.2019
comment
@GluonCollision Может быть, нам нужно увидеть данные обучения для этого? - person pissall; 24.09.2019
comment
Набор данных - это набор данных Kaggle Titanic. В основном: '' 'df = titanic.dropna (). Filter (titanic.Fare ›0)' ''. Затем я OneHot кодирую категориальные переменные, а MinMaxScale - числовые. В модель входят функции onehot / minmaxscaled. - person GluonCollision; 24.09.2019
comment
@GluonCollision Придется попробовать это самому, чтобы воспроизвести ошибку. Возможно, мне понадобится время, чтобы ответить, но я обязательно постараюсь. - person pissall; 24.09.2019