@@ -167,21 +167,24 @@ def _validateParams(self, paramMap):
167167 :param paramMap: Dict[pyspark.ml.param.Param, object]
168168 :return: True if parameters are valid
169169 """
170- model_params = [self .kerasOptimizer , self .kerasLoss , self .kerasFitParams ]
171- output_params = [self .outputCol , self .outputMode ]
172170
173- params = self .params
174- undefined = set ([p for p in params if not self .isDefined (p )])
175- undefined_tunable = undefined .intersection (model_params + output_params )
171+ tunable_params = [self .kerasOptimizer , self .kerasLoss , self .kerasFitParams , # model params
172+ self .outputCol , self .outputMode ] # output params
173+
174+ undefined = set ([p for p in self .params if not self .isDefined (p )])
175+ undefined_tunable = undefined .intersection (tunable_params )
176176 failed_define = [p .name for p in undefined .difference (undefined_tunable )]
177177 failed_tune = [p .name for p in undefined_tunable if p not in paramMap ]
178+ untunable_overrides = [p .name for p in paramMap if p not in tunable_params ]
178179
179- if failed_define or failed_tune :
180+ if failed_define or failed_tune or untunable_overrides :
180181 msg = "Following Params must be"
181182 if failed_define :
182- msg += " defined: [ " + ", " . join (failed_define ) + "]"
183+ msg += " defined: " + str (failed_define )
183184 if failed_tune :
184- msg += " defined or tuned: [" + ", " .join (failed_tune ) + "]"
185+ msg += " defined or tuned: " + str (failed_tune )
186+ if untunable_overrides :
187+ msg += " not tuned: " + str (untunable_overrides )
185188 raise ValueError (msg )
186189
187190 return True
0 commit comments