我注意到,扩展Params
的大多数(或所有)Spark ML特性(例如HasRegParam
或通常的Has<whatever>Param
)都没有定义setter,但它们确实定义了getter。参见:
setter通常由扩展它们的ML模型的子类定义,例如LinearRegression等。有时,这意味着跨多个类再次定义相同的设置器,因为几个模型具有正则化参数(例如)。
这是什么原因,而不是在每个Params子类(例如,特征setRegParam
)中定义设置器(例如HasRegParam
)?我怀疑是由于设置器的返回类型this.type
在设置ML模型的多个参数时启用了链接调用。我没有尝试过,但如果this.type
在Params特性中仅定义一次而不是每个具体的模型类定义一次,也许不能与链式调用一起正常工作?
在实现自己的Params特性时,有没有更清洁的方法来避免不得不重新定义setter?
谢谢