【发布时间】:2017-10-25 08:39:56
【问题描述】:
我在 python 中使用 spark 2.2.0。我试图弄清楚在 Tweedie 系列的情况下,Spark 在GeneralizedLineraModel 中接受的 Link 函数的默认参数是什么。
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:调用 o6739.w 时出错。 : java.lang.NullPointerException ...
当我在模型的初始化中删除显式链接=无时效果很好。
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]' ....)
因此它可以更标准,并且适用于任何家庭和链接的情况。 在 family=Tweedie 知道我应该使用什么默认值的情况下,似乎链接值不会被忽略?我尝试了 link='' 或 link='None' 但它引发了“无效的链接功能”。
【问题讨论】:
-
你最后有没有让这个工作?我在接受的解决方案中尝试了代码并得到了错误。
标签: apache-spark pyspark tweedie