【问题标题】:No Model Summary For GLMs in Pyspark / SparkMLPyspark / SparkML 中没有 GLM 的模型摘要
【发布时间】:2019-09-24 07:44:55
【问题描述】:

目前我正在熟悉PysparkSparkML。为此,我使用 Titanic 数据集来训练 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

【问题讨论】:

    标签: pyspark apache-spark-ml


    【解决方案1】:

    万一有人遇到这个问题,我也遇到了这个问题,似乎当 Hessian 矩阵不可逆时会发生此错误。该矩阵用于最大化估计系数的可能性。

    如果特征值之一为 0,则矩阵不可逆,这发生在变量中存在多重共线性时。这意味着可以使用其他变量的线性组合来预测其中一个变量。因此,无法确定每个变量的影响具有任何意义。

    一种可能的解决方案是找到(多)共线的变量,并从回归中删除其中一个。但请注意,多重共线性仅在您想解释系数时才是一个问题,而不是在模型用于预测时。

    【讨论】:

      【解决方案2】:

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

      但是您可以进行初步检查以避免错误:

      glm_fit.hasSummary() 这是一个公共布尔方法。 使用它作为

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

      这里直接点赞Pyspark source codeGeneralizedLinearRegressionTrainingSummary class source code 以及error 被抛出的地方

      【讨论】:

      • 嗨@pissall,感谢您的回答-我也在文档中看到了这一点。是否有关于何时可用摘要的良好文档?目前这对我来说不是很明显......
      • @GluonCollision 也许我们需要查看训练数据?
      • 数据集是kaggle Titanic数据集。基本上:'''df=titanic.dropna().filter(titanic.Fare>0)'''。然后我 OneHot 编码分类变量和 MinMaxScale 数字变量。 onehot / minmaxscaled 特征进入模型。
      • @GluonCollision 必须亲自尝试才能重现错误。我可能会花时间回复答案,但我一定会尝试。
      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多