与线性回归模型相比较,主要有以下推广(参考资料):
1,随机误差项不一定服从正态分布,可以服从二项、泊松、负二项、正态、伽马、逆高斯等指数分布族。
2,引入联接函数。因变量和自变量通过联接函数产生影响,联接函数满足单调可导。
from pyspark.sql import SparkSession
from pyspark.ml.regression import GeneralizedLinearRegression
spark = SparkSession\
.builder\
.appName("GeneralizedLinearRegressionExample")\
.getOrCreate()
dataset = spark.read.format("libsvm")\
.load("sample_linear_regression_data.txt")
# family:误差分布
# link:联接函数,表示先用该函数g对y值转换:g(E[Y])=Xβ
glr = GeneralizedLinearRegression(labelCol='label',featuresCol='features',family="gaussian", link="identity", maxIter=10, regParam=0.3)
model = glr.fit(dataset)
print("Coefficients: " + str(model.coefficients))
print("Intercept: " + str(model.intercept))
summary = model.summary
print("Coefficient Standard Errors: " + str(summary.coefficientStandardErrors))# 系数标准差
print("T Values: " + str(summary.tValues))
print("P Values: " + str(summary.pValues))# 以上2个都是系数显著性检验的
print("Dispersion: " + str(summary.dispersion))# 离差:也不知道是相对哪个指标的离差
print("Null Deviance: " + str(summary.nullDeviance))# 这个偏差是啥……
print("Residual Degree Of Freedom Null: " + str(summary.residualDegreeOfFreedomNull))# 残差自由度:样本数-1
print("Deviance: " + str(summary.deviance))# 偏差:好像是模型偏离饱和模型的程度,一个卡方统计量
print("Residual Degree Of Freedom: " + str(summary.residualDegreeOfFreedom))# 残差自由度:样本数-特征数-1
print("AIC: " + str(summary.aic))
print("Deviance Residuals: ")
summary.residuals().show()# 模型的残差
网友评论