2017-10-25 7 views
1

私はPythonでspark 2.2.0を使用しています。私は、Tweedieファミリーの場合、GeneralizedLineraModelでLink関数のSparkが受け入れるデフォルトのパラメータを調べようとしました。GLM with Apache Spark 2.2.0 - Tweedieファミリーの既定のリンク値

私はドキュメントhttps://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.ml.regression.GeneralizedLinearRegression

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 

に見ると私がこれをしようとしたとき= 'トゥイーディーの家族は(ユニットテストと同様のテストを使用することにより: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 ...

を上げました

モデルの初期化でexplicite 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) 

私はGLM

params={"family":"Onefamily","link":"OnelinkAccordingToFamily",..} 

のようなのparamsの標準セットを渡すことができ、その後、初期化したいなど:それはより標準的なこととして動作できるよう

glr = GeneralizedLinearRegression(family=params["family"],link=params['link]' ....) 

家族とリンクのすべての場合。 family = Tweedieの場合、どのデフォルト値を使用すべきかという考えがリンクの値を無視しないようですね?私はリンク= ''またはリンク= 'なし'を試しましたが、 '無効なリンク機能'が発生します。

答えて

0

GLR tweedieファミリを処理するには、 "linkPower"パラメータで指定した電源リンク機能を定義する必要があります。を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:トゥイーディー家族のデフォルトのリンク電力が1 - variancePowerです。

+1

それで 'glr = GeneralizedLinearRegression(family = params [" family "]、link = params ['link]' ....)'のようなものは使用できないようですが、私は 'link'辞書 'params'を呼び出し、' GeneralizedLinearRegression(** params) 'でそれを呼び出します。ありがとうございました! –