jpmml / jpmml-sklearn

Java library and command-line application for converting Scikit-Learn pipelines to PMML
GNU Affero General Public License v3.0
531 stars 117 forks source link

Detecting mis-match between model type and objective function #164

Closed farsunset closed 3 years ago

farsunset commented 3 years ago

java -jar ./jpmml-sklearn-executable-1.6.25.jar --pkl-input pipeline.pkl.z --pmml-output pipeline.pmml

八月 12, 2021 4:54:56 下午 org.jpmml.sklearn.Main run 信息: Parsing PKL.. 八月 12, 2021 4:54:56 下午 org.jpmml.sklearn.Main run 信息: Parsed PKL in 35 ms. 八月 12, 2021 4:54:56 下午 org.jpmml.sklearn.Main run 信息: Converting PKL to PMML.. 八月 12, 2021 4:54:56 下午 org.jpmml.sklearn.Main run 严重: Failed to convert PKL to PMML java.lang.ClassCastException: org.jpmml.converter.ContinuousLabel cannot be cast to org.jpmml.converter.CategoricalLabel at org.jpmml.converter.regression.RegressionModelUtil.createBinaryLogisticClassification(RegressionModelUtil.java:98) at org.jpmml.converter.mining.MiningModelUtil.createBinaryLogisticClassification(MiningModelUtil.java:70) at org.jpmml.xgboost.BinomialLogisticRegression.encodeMiningModel(BinomialLogisticRegression.java:50) at org.jpmml.xgboost.GBTree.encodeMiningModel(GBTree.java:99) at org.jpmml.xgboost.Learner.encodeMiningModel(Learner.java:337) at xgboost.sklearn.BoosterUtil.encodeBooster(BoosterUtil.java:63) at xgboost.sklearn.XGBRegressor.encodeModel(XGBRegressor.java:45) at xgboost.sklearn.XGBRegressor.encodeModel(XGBRegressor.java:27) at sklearn.Estimator.encode(Estimator.java:83) at sklearn2pmml.pipeline.PMMLPipeline.encodePMML(PMMLPipeline.java:235) at org.jpmml.sklearn.Main.run(Main.java:226) at org.jpmml.sklearn.Main.main(Main.java:143)

vruusmann commented 3 years ago

This error indicates that you have trained a regression-type XGBoost model using a categorical objective function (most likely, binary:logistic).

Fix your Python code - it is non-sensical right now.

vruusmann commented 3 years ago

Okay, reopening, because the SkLearn2PMML/JPMML-SkLearn stack could issue a more informative exception message here.

Basically, should issue a humand-friendly message whenever an XGBRegressor model type is paired with a categorical label, or XGBClassifier is paired with a continuous label.

farsunset commented 3 years ago

thanks