首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有可能将sklearn估计器放在sklearn.compose.ColumnTransformer中?

有没有可能将sklearn估计器放在sklearn.compose.ColumnTransformer中?
EN

Stack Overflow用户
提问于 2019-06-19 23:44:16
回答 1查看 210关注 0票数 0

我想创建一个PMML管道,比如

代码语言:javascript
复制
PMMLPipeline([
    ("clt", ColumnTransformer([
                ("cl", Pipeline([
                           ("std",     StandardScaler()),
                           ("pca",     PCA(4)          ),
                           ("kmeans",  KMeans(5)       )
                       ]),            clVars),
                ("id", "passthrough", idVars)
            ])
    ),
    ("et",  ExpressionTransformer("X[0]+X[1]")
    ),
    ("lr",  LinearRegression()
    )
])

有没有人知道在sklearn.compose.ColumnTransformer中使用估计器是否真的可行呢?

使用以下设置:

代码语言:javascript
复制
System:
    python: 3.7.1 (default, Dec 14 2018, 19:28:38)  [GCC 7.3.0]
executable: /opt/anaconda3/envs/python_3.7.1_eb/bin/python
   machine: Linux-4.14.114-83.126.amzn1.x86_64-x86_64-with-glibc2.10

BLAS:
    macros: HAVE_CBLAS=None, NO_ATLAS_INFO=-1
  lib_dirs: /usr/lib64/atlas
cblas_libs: cblas

Python deps:
       pip: 19.1.1
setuptools: 41.0.1
   sklearn: 0.21.2
     numpy: 1.16.4
     scipy: 1.3.0
    Cython: None
    pandas: 0.24.2

我已经分别安装了每个步骤(clt、et和lr)。

然后,PMMLPipeline创建失败,并显示以下消息:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Tuple contains an unsupported value (Python class sklearn.cluster.k_means_.KMeans)
    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.pipeline.Pipeline.encodeFeatures(Pipeline.java:68)
    at sklearn2pmml.decoration.Alias.encodeFeatures(Alias.java:56)
    at sklearn.compose.ColumnTransformer.encodeFeatures(ColumnTransformer.java:63)
    at sklearn.pipeline.Pipeline.encodeFeatures(Pipeline.java:81)
    at sklearn2pmml.pipeline.PMMLPipeline.encodePMML(PMMLPipeline.java:196)
    at org.jpmml.sklearn.Main.run(Main.java:145)
    at org.jpmml.sklearn.Main.main(Main.java:94)

如果我尝试在pandas数据帧上应用我拟合的ColumnTransformer,我可以通过使用predict获得AttributeError: 'ColumnTransformer' object has no attribute 'predict',或者使用transform获得一个包含5列的数组,该数组不包含clVars,也不包含kmeans的结果和匹配idVars的3列。因此我产生了怀疑:

EN

回答 1

Stack Overflow用户

发布于 2019-06-20 03:38:32

这个异常意味着SkLearn2PMML转换器在一个只希望找到transformer对象(TransformerMixin的子类)的位置发现了一个估计器对象(KMeans)。

根据Scikit-Learn约定,管道应该只包含一个估计器对象,作为最后一步。现在您有两个估计器对象(KMeansLinearRegression)。

如果您遵循上面的约定,那么转换应该会成功。

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

https://stackoverflow.com/questions/56671537

复制
相关文章

相似问题

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