首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有ApacheSpark2.2.0的GLM - Tweedie家族默认链接值

带有ApacheSpark2.2.0的GLM - Tweedie家族默认链接值
EN

Stack Overflow用户
提问于 2017-10-25 08:39:56
回答 1查看 1K关注 0票数 3

我在python中使用了Spark2.2.0。我试图找出链接函数Spark在GeneralizedLineraModel中接受的默认参数是什么,以防出现Tweedie家族。

当我查看https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.ml.regression.GeneralizedLinearRegression文档时

代码语言:javascript
复制
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

似乎家庭=‘tweedie’时的默认值应该是空值,但当我尝试这个值时(使用类似的测试作为单元测试:https://github.com/apache/spark/pull/17146/files/fe1d3ae36314e385990f024bca94ab1e416476f2):

代码语言:javascript
复制
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:调用o6739.w时出错。java.lang.NullPointerException .

当我在模型初始化过程中删除外植体link=None时,它工作得很好。

代码语言:javascript
复制
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)

我希望能够通过一组标准的平行线,比如

代码语言:javascript
复制
params={"family":"Onefamily","link":"OnelinkAccordingToFamily",..}

然后将GLM初始化为:

代码语言:javascript
复制
 glr = GeneralizedLinearRegression(family=params["family"],link=params['link]' ....)

因此,它可以更标准,并在任何情况下的家庭和联系工作。似乎链接值在family=Tweedie的情况下是不会被忽略的,知道我应该使用什么默认值吗?我尝试了link='‘或link='None’,但是它会引发‘无效链接函数’。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-25 08:54:47

要处理GLR tweedie家族,您需要定义通过"linkPower“参数指定的power链接函数,并且不应该将link设置为None,这会导致出现异常。

下面是一个如何使用它的示例:

代码语言:javascript
复制
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 :推特家族中默认的链接功率是1 - variancePower

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46927761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档