[ 
https://issues.apache.org/jira/browse/SPARK-7146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15093932#comment-15093932
 ] 

Wojciech Jurczyk commented on SPARK-7146:
-----------------------------------------

{quote}Cons:
Users have to be careful since parameters can have different meanings for 
different algorithms."{quote}

I think, the users have to be careful even if the trait stay private. I mean, 
getters/setters and the parameters themselves are visible anyway (users have to 
set the parameters somehow).

Consider a parameter called threshold. Obviously, it can have multiple meanings 
depending on the context. Currently, threshold's meaning hardcoded to link to 
binary classification and it can't be used in other cases.
{quote}Sharing the Param traits helps to encourage standardized Param names and 
documentation{quote} but result in more specialized params (which restricts 
their use cases).

On the other hand, inputCol/outputCol are good examples of parameters that are 
fully universal and generic. Having them in one trait would indeed result in 
some kind of standardization.

{quote}If the shared Params are public, then implementations could test for the 
traits.{quote} A side note: this can be done anyway (by structural typing). And 
it's not always a bad thing (knowing that the meaning of the parameters can be 
different).
{quote}It is unclear if we want users to rely on these traits, which are 
somewhat experimental.{quote}
As I mentioned in SPARK-12751, we want to rely on the traits (for now only 
input/output column, and obviously, only for Transformers that are not 
UnaryTransformers). As far as I know classes in ML that use sharedParams are 
experimental, too (like LinearRegressionModel). We depend on experimental API 
anyway.

Maybe the parameters can be divided into groups? Parameters in the first one 
would be fully universal (like inputCol). In the second group parameters would 
be less universal (but still shared, if used multiple times).
Additionally, I think some parameters should be thrown out from the shared 
params. Consider the threshold from the shared params once again. It's used 
only in Logistic Regression (if I'm correct). Other operations, like Binarize 
define their own threshold param.

Finally, I would vote for the option (b). Overriding docs will do. And then, 
maybe it'd possible to split the trait into two: for internal and external use? 
To benefit from having both private and public traits.


> Should ML sharedParams be a public API?
> ---------------------------------------
>
>                 Key: SPARK-7146
>                 URL: https://issues.apache.org/jira/browse/SPARK-7146
>             Project: Spark
>          Issue Type: Brainstorming
>          Components: ML
>            Reporter: Joseph K. Bradley
>
> Discussion: Should the Param traits in sharedParams.scala be public?
> Pros:
> * Sharing the Param traits helps to encourage standardized Param names and 
> documentation.
> Cons:
> * Users have to be careful since parameters can have different meanings for 
> different algorithms.
> * If the shared Params are public, then implementations could test for the 
> traits.  It is unclear if we want users to rely on these traits, which are 
> somewhat experimental.
> Currently, the shared params are private.
> Proposal: Either
> (a) make the shared params private to encourage users to write specialized 
> documentation and value checks for parameters, or
> (b) design a better way to encourage overriding documentation and parameter 
> value checks



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to