Я заметил, что большинство (или все) черты Spark ML, расширяющие Params
, подобно HasRegParam
или вообще Has<whatever>Param
, не определяют сеттеры, но они определяют геттеры.См .:
https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/param/shared/sharedParams.scala
Установщики обычно определяются подклассами расширяющих их моделей ML, такими как LinearRegression и так далее.Иногда это означает определение одного и того же установщика снова в нескольких классах, потому что несколько моделей имеют параметр регуляризации (например).
В чем причина этого вместо определения сеттеров (например, setRegParam
) в каждом из подклассов Params (например, в признаке HasRegParam
)?Я подозреваю, что это из-за типа возвращаемого значения сеттеров, this.type
, который разрешает цепочечные вызовы при установке нескольких параметров модели ML.Я не пробовал сам, но, возможно, this.type
не работает должным образом с цепочечными вызовами, если он определен только один раз в признаке Params вместо каждого конкретного класса модели?
Есть ли более чистый способ избежать переопределения сеттера при реализации моих собственных черт Params?
Спасибо