在Spark中,我使用设置器设置了Estimator的所有参数。现在,我想将所有这些值复制到另一个Estimator,该Estimator是另一个类中的现有val。我可以在第二个实例中一个接一个地使用二传手,但是我想一次复制所有参数,就像copyValues()
一样-但copyValues
是私有的:-(
我尝试调用mymodel.extractParamMap()
,然后遍历它,调用othermodel.set(param, value)
,但不做任何修改,但是原始的Params已经设置了父对象,因此当Spark意识到新模型是不是这些参数的所有者(父母)。
我不能(至少不容易)创建新的Param实例(更新了新的父级),因为每个原始Param都属于我在遍历param贴图时无法检索的Params的某些子类(例如DoubleParam等)。我为此使用反射。
我不能只创建一个具有相同origina值的新ParamPair
,而无需先指定有关参数的基础类型的东西。我可以对每种可能的类型(例如IntParam
,DoubleParam
等)进行某种模式匹配,以在每种情况下都创建合适的(父更新的)Param类型(我尝试过并且可行) ),但这很丑陋而且一点也不优雅。
难道没有一种更简单的方法可以将所有参数值一次从一个模型(估计器)传输到另一个现有模型吗?类似于copyValues
,但对于公众来说:-)
答案 0 :(得分:0)
如果有帮助,我可以用Python展示给我看,我想它在Scala中也很相似。例如,如果我们有:
rf = RandomForestRegressor(featuresCol = 'features', labelCol = 'TARGET', predictionCol='prediccion',
numTrees = 46)
您可以通过以下方式获取字典参数:
params = {param[0].name: param[1] for param in rf.extractParamMap().items()}
并创建一个新模型:
new_rf = RandomForestRegressor(**params)