GLM with Apache Spark 2.2.0 - Tweedie 系列默认 Link 值
GLM with Apache Spark 2.2.0 - Tweedie family default Link value
我在 python 中使用 spark 2.2.0。我试图弄清楚 Link 函数 Spark 在 Tweedie 家族的情况下在 GeneralizedLineraModel
中接受的默认参数是什么。
class pyspark.ml.regression.GeneralizedLinearRegression(self, labelCol="label", featuresCol="features", predictionCol="prediction", family="gaussian", link=None, fitIntercept=True, maxIter=25, tol=1e-6, regParam=0.0, weightCol=None, solver="irls", linkPredictionCol=None
似乎 family='tweedie' 时的默认值应该是 None 但是当我尝试这个时(通过使用类似的测试作为单元测试:https://github.com/apache/spark/pull/17146/files/fe1d3ae36314e385990f024bca94ab1e416476f2):
from pyspark.ml.linalg import Vectors
df = spark.createDataFrame([(1.0, Vectors.dense(0.0, 0.0)),\
(1.0, Vectors.dense(1.0, 2.0)),\
(2.0, Vectors.dense(0.0, 0.0)),\
(2.0, Vectors.dense(1.0, 1.0)),], ["label", "features"])
glr = GeneralizedLinearRegression(family="tweedie",variancePower=1.42,link=None)
model = glr.fit(df)
transformed = model.transform(df)
它提出了 Null pointer Java exception
...
Py4JJavaError: An error occurred while calling o6739.w. :
java.lang.NullPointerException ...
当我在模型的初始化中删除显式 link=None 时效果很好。
from pyspark.ml.linalg import Vectors
df = spark.createDataFrame([(1.0, Vectors.dense(0.0, 0.0)),\
(1.0, Vectors.dense(1.0, 2.0)),\
(2.0, Vectors.dense(0.0, 0.0)),\
(2.0, Vectors.dense(1.0, 1.0)),], ["label", "features"])
glr = GeneralizedLinearRegression(family="tweedie",variancePower=1.42)
model = glr.fit(df)
transformed = model.transform(df)
我希望能够传递一组标准参数,例如
params={"family":"Onefamily","link":"OnelinkAccordingToFamily",..}
然后初始化GLM为:
glr = GeneralizedLinearRegression(family=params["family"],link=params['link]' ....)
所以它可以更标准,适用于任何家庭和 link。
似乎 link 值在 family=Tweedie 的情况下没有被忽略我应该使用什么默认值?我尝试了 link='' 或 link='None' 但它引发了 'invalid link function'.
要处理 GLR tweedie
系列,您需要定义通过 "linkPower" 参数指定的幂 link 函数,并且您不应设置 link
None
导致你遇到的异常。
这是一个如何使用它的例子:
df = spark.createDataFrame(
[(1.0, Vectors.dense(0.0, 0.0)),
(1.0, Vectors.dense(1.0, 2.0)),
(2.0, Vectors.dense(0.0, 0.0)),
(2.0, Vectors.dense(1.0, 1.0)), ], ["label", "features"])
# in this case the default link power applies
glr = GeneralizedLinearRegression(family="tweedie", variancePower=1.6)
model = glr.fit(df) # in this case the default link power applies
model2 = glr.setLinkPower(-1.0).fit(df)
PS : tweedie 系列中的默认 link 功率是 1 - variancePower
.
我在 python 中使用 spark 2.2.0。我试图弄清楚 Link 函数 Spark 在 Tweedie 家族的情况下在 GeneralizedLineraModel
中接受的默认参数是什么。
class pyspark.ml.regression.GeneralizedLinearRegression(self, labelCol="label", featuresCol="features", predictionCol="prediction", family="gaussian", link=None, fitIntercept=True, maxIter=25, tol=1e-6, regParam=0.0, weightCol=None, solver="irls", linkPredictionCol=None
似乎 family='tweedie' 时的默认值应该是 None 但是当我尝试这个时(通过使用类似的测试作为单元测试:https://github.com/apache/spark/pull/17146/files/fe1d3ae36314e385990f024bca94ab1e416476f2):
from pyspark.ml.linalg import Vectors
df = spark.createDataFrame([(1.0, Vectors.dense(0.0, 0.0)),\
(1.0, Vectors.dense(1.0, 2.0)),\
(2.0, Vectors.dense(0.0, 0.0)),\
(2.0, Vectors.dense(1.0, 1.0)),], ["label", "features"])
glr = GeneralizedLinearRegression(family="tweedie",variancePower=1.42,link=None)
model = glr.fit(df)
transformed = model.transform(df)
它提出了 Null pointer Java exception
...
Py4JJavaError: An error occurred while calling o6739.w. : java.lang.NullPointerException ...
当我在模型的初始化中删除显式 link=None 时效果很好。
from pyspark.ml.linalg import Vectors
df = spark.createDataFrame([(1.0, Vectors.dense(0.0, 0.0)),\
(1.0, Vectors.dense(1.0, 2.0)),\
(2.0, Vectors.dense(0.0, 0.0)),\
(2.0, Vectors.dense(1.0, 1.0)),], ["label", "features"])
glr = GeneralizedLinearRegression(family="tweedie",variancePower=1.42)
model = glr.fit(df)
transformed = model.transform(df)
我希望能够传递一组标准参数,例如
params={"family":"Onefamily","link":"OnelinkAccordingToFamily",..}
然后初始化GLM为:
glr = GeneralizedLinearRegression(family=params["family"],link=params['link]' ....)
所以它可以更标准,适用于任何家庭和 link。 似乎 link 值在 family=Tweedie 的情况下没有被忽略我应该使用什么默认值?我尝试了 link='' 或 link='None' 但它引发了 'invalid link function'.
要处理 GLR tweedie
系列,您需要定义通过 "linkPower" 参数指定的幂 link 函数,并且您不应设置 link
None
导致你遇到的异常。
这是一个如何使用它的例子:
df = spark.createDataFrame(
[(1.0, Vectors.dense(0.0, 0.0)),
(1.0, Vectors.dense(1.0, 2.0)),
(2.0, Vectors.dense(0.0, 0.0)),
(2.0, Vectors.dense(1.0, 1.0)), ], ["label", "features"])
# in this case the default link power applies
glr = GeneralizedLinearRegression(family="tweedie", variancePower=1.6)
model = glr.fit(df) # in this case the default link power applies
model2 = glr.setLinkPower(-1.0).fit(df)
PS : tweedie 系列中的默认 link 功率是 1 - variancePower
.