首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用sklearn2pmml将模型转换为PMML时,sklearn.preprocessing._data.MinMaxScaler不是受支持的转换器

当使用sklearn2pmml将模型转换为PMML时,sklearn.preprocessing._data.MinMaxScaler不是受支持的转换器
EN

Stack Overflow用户
提问于 2020-04-29 10:11:27
回答 1查看 860关注 0票数 0
代码语言:javascript
复制
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn2pmml.pipeline import PMMLPipeline
from sklearn.impute import SimpleImputer
from sklearn_pandas import DataFrameMapper

mapper = DataFrameMapper([
        (model_col,[SimpleImputer(strategy = "most_frequent"),MinMaxScaler()])
    ])

clf = GradientBoostingClassifier(n_estimators=200,learning_rate=0.1,max_depth=5,random_state=10)
gbdt_pipeline = PMMLPipeline([('mapper', mapper), ("classifier", clf)])

sklearn2pmml(gbdt_pipeline,"gbdt.pmml",with_repr=True)

转换为PMML以报告错误。错误如下

代码语言:javascript
复制
Standard output is empty
Standard error:
 28, 2020 4:04:05  org.jpmml.sklearn.Main run
Ϣ: Parsing PKL..
 28, 2020 4:04:05  org.jpmml.sklearn.Main run
Ϣ: Parsed PKL in 80 ms.
 28, 2020 4:04:05  org.jpmml.sklearn.Main run
Ϣ: Converting..
 28, 2020 4:04:05  org.jpmml.sklearn.Main run
: Failed to convert
java.lang.IllegalArgumentException: The value object (Python class sklearn.preprocessing._data.MinMaxScaler) is not a supported Transformer
    at org.jpmml.sklearn.CastFunction.apply(CastFunction.java:43)
    at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:612)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47)
    at sklearn_pandas.DataFrameMapper.initializeFeatures(DataFrameMapper.java:72)
    at sklearn.Initializer.encodeFeatures(Initializer.java:41)
    at sklearn.Transformer.updateAndEncodeFeatures(Transformer.java:85)
    at sklearn.pipeline.Pipeline.encodeFeatures(Pipeline.java:83)
    at sklearn2pmml.pipeline.PMMLPipeline.encodePMML(PMMLPipeline.java:203)
    at org.jpmml.sklearn.Main.run(Main.java:145)
    at org.jpmml.sklearn.Main.main(Main.java:94)
Caused by: java.lang.ClassCastException: Cannot cast net.razorvine.pickle.objects.ClassDict to sklearn.Transformer
    at java.lang.Class.cast(Unknown Source)
    at org.jpmml.sklearn.CastFunction.apply(CastFunction.java:41)
    ... 9 more

我使用的scikit-learn是0.22.2,当我使用0.21版本时,没有错误,谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-04-30 00:39:41

Scikit-Learn在0.21.X和0.22.X开发分支之间重命名了几个模块。例如,sklearn.preprocessing.data模块变成了sklearn.preprocessing._data (前导下划线应该解释为现在是私有模块)。

您使用的是过时的SkLearn2PMML包版本,该版本尚不了解0.22.X模块。请将SkLearn2PMML包更新为最新版本(pip install --upgrade sklearn2pmml),此问题将得到解决。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61493075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档