Closed szymoonl closed 1 year ago
According to this comment, I tried to convert Pycaret model as follow:
Great to see that this old workaround is still valid!
However, I wonder if PyCaret has "systematized" their workflows, so that they could be programmatically converted to standard Scikit-Learn pipeline objects.
Exception in thread "main" java.lang.IllegalArgumentException: The transformer object (Python class pycaret.internal.preprocess.DataTypes_Auto_infer) is not a supported Transformer
Just as the exception message points out - there is a custom PyCaret transformer class pycaret.internal.preprocess.DataTypes_Auto_infer
in your pipeline.
Potential solutions:
For starters, try to convert the model without pre-processing. When you can get this part working, only then start adding complexity (such as pre-processing).
When trying to convert the model alone without preprocessing, the following error appears:
Aug 16, 2022 12:48:12 PM org.jpmml.sklearn.example.Main run INFO: Parsing PKL.. Aug 16, 2022 12:48:12 PM org.jpmml.sklearn.example.Main run SEVERE: Failed to parse PKL net.razorvine.pickle.PickleException: failed to setstate() at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:395) at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:220) at org.jpmml.python.CustomUnpickler.dispatch(CustomUnpickler.java:31) at org.jpmml.python.PickleUtil$1.dispatch(PickleUtil.java:64) at net.razorvine.pickle.Unpickler.load(Unpickler.java:109) at org.jpmml.python.PickleUtil.unpickle(PickleUtil.java:85) at org.jpmml.sklearn.example.Main.run(Main.java:163) at org.jpmml.sklearn.example.Main.main(Main.java:151) Caused by: java.lang.NoSuchMethodException: net.razorvine.pickle.objects.ClassDict.setstate(java.lang.Integer) at java.base/java.lang.Class.getMethod(Class.java:2108) at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:392) ... 7 more
Exception in thread "main" net.razorvine.pickle.PickleException: failed to setstate() at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:395) at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:220) at org.jpmml.python.CustomUnpickler.dispatch(CustomUnpickler.java:31) at org.jpmml.python.PickleUtil$1.dispatch(PickleUtil.java:64) at net.razorvine.pickle.Unpickler.load(Unpickler.java:109) at org.jpmml.python.PickleUtil.unpickle(PickleUtil.java:85) at org.jpmml.sklearn.example.Main.run(Main.java:163) at org.jpmml.sklearn.example.Main.main(Main.java:151) Caused by: java.lang.NoSuchMethodException: net.razorvine.pickle.objects.ClassDict.setstate(java.lang.Integer) at java.base/java.lang.Class.getMethod(Class.java:2108) at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:392) ... 7 more
The model is a random forest but trained with GPU, so it is a cuml object:
RandomForestClassifier()
<class 'cuml.ensemble.randomforestclassifier.RandomForestClassifier'>
Converting the model alone without GPU as a sklearn object works without problem. 🤔 When converting model with preprocessing pipeline I got below exception:
Aug 16, 2022 12:48:32 PM org.jpmml.sklearn.example.Main run INFO: Parsing PKL.. Aug 16, 2022 12:48:32 PM org.jpmml.sklearn.example.Main run SEVERE: Failed to parse PKL net.razorvine.pickle.PickleException: failed to setstate() at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:395) at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:220) at org.jpmml.python.CustomUnpickler.dispatch(CustomUnpickler.java:31) at org.jpmml.python.PickleUtil$1.dispatch(PickleUtil.java:64) at net.razorvine.pickle.Unpickler.load(Unpickler.java:109) at org.jpmml.python.PickleUtil.unpickle(PickleUtil.java:85) at org.jpmml.sklearn.example.Main.run(Main.java:163) at org.jpmml.sklearn.example.Main.main(Main.java:151) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:393) ... 7 more Caused by: net.razorvine.pickle.PickleException: Expected 8 attribute(s), got 9 attribute(s) at org.jpmml.python.CustomPythonObject.createAttributeMap(CustomPythonObject.java:81) at numpy.DType.setstate(DType.java:50) ... 12 more
Exception in thread "main" net.razorvine.pickle.PickleException: failed to setstate() at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:395) at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:220) at org.jpmml.python.CustomUnpickler.dispatch(CustomUnpickler.java:31) at org.jpmml.python.PickleUtil$1.dispatch(PickleUtil.java:64) at net.razorvine.pickle.Unpickler.load(Unpickler.java:109) at org.jpmml.python.PickleUtil.unpickle(PickleUtil.java:85) at org.jpmml.sklearn.example.Main.run(Main.java:163) at org.jpmml.sklearn.example.Main.main(Main.java:151) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at net.razorvine.pickle.Unpickler.load_build(Unpickler.java:393) ... 7 more Caused by: net.razorvine.pickle.PickleException: Expected 8 attribute(s), got 9 attribute(s) at org.jpmml.python.CustomPythonObject.createAttributeMap(CustomPythonObject.java:81) at numpy.DType.setstate(DType.java:50) ... 12 more
@szymoonl Please open a new issue for each unsupported ML framework.
Otherwise I'll classify all your messages as "spam", and send to trash.
According to this comment, I tried to convert Pycaret model as follow:
sklearn: 0.23.2 sklearn pandas: 2.2.0 sklearn2pmml: 0.84.1 pycaret: 2.3.6 openjdk version "11.0.15" 2022-04-19
The following exception occurred during conversion using a .jar:
How to solve this? 🤔 Thank you in advance!