Pyspark / SparkML中没有GLM的模型摘要

e4eetjau  于 2023-02-21  发布在  Spark
关注(0)|答案(3)|浏览(184)

我现在正在熟悉PysparkSparkML,为此我使用titanic数据集来训练一个GLM,以预测该数据集中的"票价"。
我一直在关注Spark的文档,我确实得到了一个工作模型(我称之为glm_fare),但是当我尝试使用summary评估训练好的模型时,我得到了下面的错误消息:

  • 运行时错误:此广义线性回归模型没有可用的训练汇总 *

这是为什么呢?
培训守则如下:

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
wgxvkvu9

wgxvkvu91#

为了防止有人遇到这个问题,我也遇到了这个问题,这个错误似乎发生在Hessian矩阵不可逆的时候,这个矩阵用于估计系数的似然最大化。
如果其中一个特征值为0(当变量中存在多重共线性时会发生这种情况),则矩阵不可逆。这意味着其中一个变量可以通过其他变量的线性组合进行预测。因此,无法确定每个变量的影响是否具有任何显著性。
一种可能的解决方案是找到(多重)共线的变量,并从回归中删除其中一个变量。但请注意,只有在您要解释系数时,多重共线才是一个问题,而不是在模型用于预测时。

lb3vh1jj

lb3vh1jj2#

据记录,GeneralizedLinearRegressionModel文档中的模型可能没有可用的summary

但是,您可以执行初始检查以避免错误:

glm_fit.hasSummary(),它是一个公共布尔方法。

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

以下是Pyspark源代码和GeneralizedLinearRegressionTrainingSummary类源代码的直接类似内容以及抛出错误的位置

vsaztqbk

vsaztqbk3#

确保一个热编码器的输入变量从0开始。我犯了一个导致未创建摘要的错误,我将quarter(1,2,3,4)直接放入一个热编码器,得到一个长度为4的向量,其中一列为0。我将quarter转换为0,1,2,3,问题解决了。

相关问题