广义线性模型(GLMs)算法原理及Spark MLlib调用实例(Scala/Java/Python)
2016-12-05 16:19
791 查看
广义线性回归
算法介绍:
与线性回归假设输出服从高斯分布不同,广义线性模型(GLMs)指定线性模型的因变量
服从指数型分布。Spark的GeneralizedLinearRegression接口允许指定GLMs包括线性回归、泊松回归、逻辑回归等来处理多种预测问题。目前 spark.ml仅支持指数型分布家族中的一部分类型,如下:
*注意目前Spark在
GLMs要求的指数型分布可以为正则或者自然形式。自然指数型分布为如下形式:
其中
是强度参数,
是分散度参数。在GLM中响应变量
服从自然指数族分布:
其中强度参数
与响应变量
的期望值联系如下:
其中
由所选择的分布形式所决定。GLMs同样允许指定连接函数,连接函数决定了响应变量期望值与线性预测器之间的关系:
通常,连接函数选择如
,在强度参数与线性预测器之间产生一个简单的关系。这种情况下,连接函数也称为正则连接函数:
GLM通过最大化似然函数来求得回归系数:
其中强度参数和回归系数的联系如下:
Spark的GeneralizedLinearRegression接口提供汇总统计来诊断GLM模型的拟合程度,包括残差、p值、残差、Akaike信息准则及其它。
参数:
family:
类型:字符串型。
含义:模型中使用的误差分布类型。
featuresCol:
类型:字符串型。
含义:特征列名。
fitIntercept:
类型:布尔型。
含义:是否训练拦截对象。
labelCol:
类型:字符串型。
含义:标签列名。
link:
类型:字符串型。
含义:连接函数名,描述线性预测器和分布函数均值之间关系。
linkPredictiongCol:
类型:字符串型。
含义:连接函数(线性预测器列名)。
maxIter:
类型:整数型。
含义:最多迭代次数(>=0)。
predictionCol:
类型:字符串型。
含义:预测结果列名。
regParam:
类型:双精度型。
含义:正则化参数(>=0)。
solver:
类型:字符串型。
含义:优化的求解算法。
tol:
类型:双精度型。
含义:迭代算法的收敛性。
weightCol:
类型:字符串型。
含义:列权重。
调用:
Scala:
算法介绍:
与线性回归假设输出服从高斯分布不同,广义线性模型(GLMs)指定线性模型的因变量
服从指数型分布。Spark的GeneralizedLinearRegression接口允许指定GLMs包括线性回归、泊松回归、逻辑回归等来处理多种预测问题。目前 spark.ml仅支持指数型分布家族中的一部分类型,如下:
家族 | 因变量类型 | 支持类型 |
高斯 | 连续型 | Identity*, Log, Inverse |
二项 | 二值型 | Logit*, Probit, CLogLog |
泊松 | 计数型 | Log*, Identity, Sqrt |
伽马 | 连续型 | Inverse*, Idenity, Log |
GeneralizedLinearRegression仅支持最多4096个特征,如果特征超过4096个将会引发异常。对于线性回归和逻辑回归,如果模型特征数量会不断增长,则可通过 LinearRegression 和LogisticRegression来训练。
GLMs要求的指数型分布可以为正则或者自然形式。自然指数型分布为如下形式:
其中
是强度参数,
是分散度参数。在GLM中响应变量
服从自然指数族分布:
其中强度参数
与响应变量
的期望值联系如下:
其中
由所选择的分布形式所决定。GLMs同样允许指定连接函数,连接函数决定了响应变量期望值与线性预测器之间的关系:
通常,连接函数选择如
,在强度参数与线性预测器之间产生一个简单的关系。这种情况下,连接函数也称为正则连接函数:
GLM通过最大化似然函数来求得回归系数:
其中强度参数和回归系数的联系如下:
Spark的GeneralizedLinearRegression接口提供汇总统计来诊断GLM模型的拟合程度,包括残差、p值、残差、Akaike信息准则及其它。
参数:
family:
类型:字符串型。
含义:模型中使用的误差分布类型。
featuresCol:
类型:字符串型。
含义:特征列名。
fitIntercept:
类型:布尔型。
含义:是否训练拦截对象。
labelCol:
类型:字符串型。
含义:标签列名。
link:
类型:字符串型。
含义:连接函数名,描述线性预测器和分布函数均值之间关系。
linkPredictiongCol:
类型:字符串型。
含义:连接函数(线性预测器列名)。
maxIter:
类型:整数型。
含义:最多迭代次数(>=0)。
predictionCol:
类型:字符串型。
含义:预测结果列名。
regParam:
类型:双精度型。
含义:正则化参数(>=0)。
solver:
类型:字符串型。
含义:优化的求解算法。
tol:
类型:双精度型。
含义:迭代算法的收敛性。
weightCol:
类型:字符串型。
含义:列权重。
调用:
Scala:
import org.apache.spark.ml.regression.GeneralizedLinearRegression // Load training data val dataset = spark.read.format("libsvm") .load("data/mllib/sample_linear_regression_data.txt") val glr = new GeneralizedLinearRegression() .setFamily("gaussian") .setLink("identity") .setMaxIter(10) .setRegParam(0.3) // Fit the model val model = glr.fit(dataset) // Print the coefficients and intercept for generalized linear regression model println(s"Coefficients: ${model.coefficients}") println(s"Intercept: ${model.intercept}") // Summarize the model over the training set and print out some metrics val summary = model.summary println(s"Coefficient Standard Errors: ${summary.coefficientStandardErrors.mkString(",")}") println(s"T Values: ${summary.tValues.mkString(",")}") println(s"P Values: ${summary.pValues.mkString(",")}") println(s"Dispersion: ${summary.dispersion}") println(s"Null Deviance: ${summary.nullDeviance}") println(s"Residual Degree Of Freedom Null: ${summary.residualDegreeOfFreedomNull}") println(s"Deviance: ${summary.deviance}") println(s"Residual Degree Of Freedom: ${summary.residualDegreeOfFreedom}") println(s"AIC: ${summary.aic}") println("Deviance Residuals: ") summary.residuals().show()Java:
import java.util.Arrays; import org.apache.spark.ml.regression.GeneralizedLinearRegression; import org.apache.spark.ml.regression.GeneralizedLinearRegressionModel; import org.apache.spark.ml.regression.GeneralizedLinearRegressionTrainingSummary; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; // Load training data Dataset<Row> dataset = spark.read().format("libsvm") .load("data/mllib/sample_linear_regression_data.txt"); GeneralizedLinearRegression glr = new GeneralizedLinearRegression() .setFamily("gaussian") .setLink("identity") .setMaxIter(10) .setRegParam(0.3); // Fit the model GeneralizedLinearRegressionModel model = glr.fit(dataset); // Print the coefficients and intercept for generalized linear regression model System.out.println("Coefficients: " + model.coefficients()); System.out.println("Intercept: " + model.intercept()); // Summarize the model over the training set and print out some metrics GeneralizedLinearRegressionTrainingSummary summary = model.summary(); System.out.println("Coefficient Standard Errors: " + Arrays.toString(summary.coefficientStandardErrors())); System.out.println("T Values: " + Arrays.toString(summary.tValues())); System.out.println("P Values: " + Arrays.toString(summary.pValues())); System.out.println("Dispersion: " + summary.dispersion()); System.out.println("Null Deviance: " + summary.nullDeviance()); System.out.println("Residual Degree Of Freedom Null: " + summary.residualDegreeOfFreedomNull()); System.out.println("Deviance: " + summary.deviance()); System.out.println("Residual Degree Of Freedom: " + summary.residualDegreeOfFreedom()); System.out.println("AIC: " + summary.aic()); System.out.println("Deviance Residuals: "); summary.residuals().show();Python:
from pyspark.ml.regression import GeneralizedLinearRegression # Load training data dataset = spark.read.format("libsvm")\ .load("data/mllib/sample_linear_regression_data.txt") glr = GeneralizedLinearRegression(family="gaussian", link="identity", maxIter=10, regParam=0.3) # Fit the model model = glr.fit(dataset) # Print the coefficients and intercept for generalized linear regression model print("Coefficients: " + str(model.coefficients)) print("Intercept: " + str(model.intercept)) # Summarize the model over the training set and print out some metrics summary = model.summary print("Coefficient Standard Errors: " + str(summary.coefficientStandardErrors)) print("T Values: " + str(summary.tValues)) print("P Values: " + str(summary.pValues)) print("Dispersion: " + str(summary.dispersion)) print("Null Deviance: " + str(summary.nullDeviance)) print("Residual Degree Of Freedom Null: " + str(summary.residualDegreeOfFreedomNull)) print("Deviance: " + str(summary.deviance)) print("Residual Degree Of Freedom: " + str(summary.residualDegreeOfFreedom)) print("AIC: " + str(summary.aic)) print("Deviance Residuals: ") summary.residuals().show()
相关文章推荐
- K均值(K-means)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 朴素贝叶斯算法原理及Spark MLlib调用实例(Scala/Java/Python)
- 协同过滤(ALS)算法原理及Spark MLlib调用实例(Scala/Java/Python)
- 逻辑回归算法原理及Spark MLlib调用实例(Scala/Java/python)
- 随机森林(Random Forest)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 生存回归(加速失效时间模型)算法原理及Spark MLlib调用实例(Scala/Java/python)
- scala---文档主题生成模型(LDA)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 二分K均值算法原理及Spark MLlib调用实例(Scala/Java/Python)
- 随机森林回归(Random Forest)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 多层感知机(MLP)算法原理及Spark MLlib调用实例(Scala/Java/Python)
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 文档主题生成模型(LDA)算法原理及Spark MLlib调用实例(Scala/Java/python)
- MLlib--多层感知机(MLP)算法原理及Spark MLlib调用实例(Scala/Java/Python)
- 梯度迭代树回归(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 决策树回归算法原理及Spark MLlib调用实例(Scala/Java/python)
- 逻辑回归算法原理及Spark MLlib调用实例(Scala/Java/python)
- 决策树算法原理及Spark MLlib调用实例(Scala/Java/python)
- Spark MLlib TF-IDF算法原理及调用实例(Scala/Java/python)