This issue was brought up by https://issues.apache.org/jira/browse/SPARK-7147: There are multiple locations in which a parameter can be specified (in setters and in calling fit/transform), and we should check the parameter value in each one. It would be nice to avoid duplicating the checking code.
- Add field to class Param: val isValid: T => Boolean, with default value of always returning true
- Add helper methods in new ParamCheck object for constructing common validation checks (especially to help Java users)
- Ensure that this validation is always done, most likely by always settings parameters by constructing a ParamPair + validating inside the ParamPair constructor