我现在正在熟悉Pyspark
和SparkML
,为此我使用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
3条答案
按热度按时间wgxvkvu91#
为了防止有人遇到这个问题,我也遇到了这个问题,这个错误似乎发生在Hessian矩阵不可逆的时候,这个矩阵用于估计系数的似然最大化。
如果其中一个特征值为0(当变量中存在多重共线性时会发生这种情况),则矩阵不可逆。这意味着其中一个变量可以通过其他变量的线性组合进行预测。因此,无法确定每个变量的影响是否具有任何显著性。
一种可能的解决方案是找到(多重)共线的变量,并从回归中删除其中一个变量。但请注意,只有在您要解释系数时,多重共线才是一个问题,而不是在模型用于预测时。
lb3vh1jj2#
据记录,GeneralizedLinearRegressionModel文档中的模型可能没有可用的
summary
。但是,您可以执行初始检查以避免错误:
glm_fit.hasSummary()
,它是一个公共布尔方法。以下是Pyspark源代码和GeneralizedLinearRegressionTrainingSummary类源代码的直接类似内容以及抛出错误的位置
vsaztqbk3#
确保一个热编码器的输入变量从0开始。我犯了一个导致未创建摘要的错误,我将quarter(1,2,3,4)直接放入一个热编码器,得到一个长度为4的向量,其中一列为0。我将quarter转换为0,1,2,3,问题解决了。