python-3.x - 是否可以将 sklearn 估计器放在 sklearn.compose.ColumnTransformer 中?
问题描述
我想创建一个 PMML 管道,例如
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 中使用估算器?
使用以下设置:
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)。
然后,PMMLipeline 创建失败:
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,我可以AttributeError: 'ColumnTransformer' object has no attribute 'predict'
通过 usingpredict
或一个包含 5 列不包含 clVars 也不包含 kmeans 的结果和 3 列通过 using 匹配 idVars 的列来获得transform
。因此我的怀疑:s
解决方案
此异常意味着 SkLearn2PMML 转换器在预期只能找到KMeans
转换器对象( 的子类)的位置找到了估计器对象 ( ) TransformerMixin
。
根据 Scikit-Learn 的约定,管道应该只包含一个估计器对象,作为最后一步。现在你有两个估计器对象(KMeans
和LinearRegression
)。
如果您遵守上述约定,那么转换应该会成功。
推荐阅读
- amazon-web-services - AWS ECS 无法放置任务,因为没有容器实例满足其所有要求
- sql - 使用 Power BI 连接到远程服务器
- php - WooCommerce 显示随机产品属性
- c# - 如何在我的 T4 模板中嵌入图像?
- linux - 没有密码的签名 rpm
- javascript - 将字体真棒图标动态添加到 SVG 文本元素
- raspberry-pi - Proteus 中的树莓派
- typescript - Typescript 或 TSlint 可以对隐式类型转换发出警告吗
- angular - 我已经为我的后端 ASP.NET Core Web api 为本地主机创建了 SSL/TLS 证书,我可以与我的前端 Angular 应用程序共享它吗?
- sharepoint-online - SharePoint Online(现代视图)自定义(列表表单 - NewForm.aspx 等)