如何将功能管道从 scikit-learn V0.21 移植到 V0.24

Posted

技术标签:

【中文标题】如何将功能管道从 scikit-learn V0.21 移植到 V0.24【英文标题】:How to port feature pipeline from scikit-learn V0.21 to V0.24 【发布时间】:2022-01-13 01:34:24 【问题描述】:

我正在尝试将在 scikit-learn V0.21 中训练的 sklearn 特征管道移植到 scikit-learn V0.24,因为我没有原始特征数据来再次训练管道。如果我使用新数据,特征维度和位置可能与以下模型不同,因为我在管道中有 DictVectorizer。

我尝试在 V0.21 中使用 picklejoblib 对管道进行序列化,然后在 V0.24 中对其进行反序列化。不幸的是,在这两种情况下,代码在 V0.24 中加载时都会引发 ModuleNotFoundError: No module named 'sklearn.feature_extraction.dict_vectorizer' 错误。

我分别使用 V0.21 和 V0.24 使用相同的代码创建了管道。打印出来时,它们显示出一些细微的差别。

在 V0.21 中

Pipeline(memory=None,
         steps=[('selector', ItemSelector(key='hsd_feature_map')),
                ('dv1',
                 DictVectorizer(dtype=<class 'numpy.float64'>, separator='=',
                                sort=True, sparse=False)),
                ('tfidf',
                 TfidfTransformer(norm='l2', smooth_idf=True, sublinear_tf=True,
                                  use_idf=True)),
                ('max', MaxAbsScaler(copy=True))],
         verbose=False)

在 V0.24 中

Pipeline(steps=[('selector', ItemSelector(key='hsd_feature_map')),
                ('dv1', DictVectorizer(sparse=False)),
                ('tfidf', TfidfTransformer(sublinear_tf=True)),
                ('max', MaxAbsScaler())])

我想知道是否有办法将特征管道或其参数从 scikit-learn V0.21 转移到 V0.24。

【问题讨论】:

【参考方案1】:

从 sklearn 版本 0.22.X DictVectorizer 导入已更改 来自

sklearn/feature_extraction/dict_vectorizer.py

sklearn/feature_extraction/_dict_vectorizer.py

我认为您可以根据此 answer 覆盖 DictVectorizer 导入

【讨论】:

非常感谢您,米格尔!伟大的洞察力!

以上是关于如何将功能管道从 scikit-learn V0.21 移植到 V0.24的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn:在管道中使用 SelectKBest 时获取选定的功能

管道中的 Scikit-Learn FunctionTransformer 没有其他功能 - 不返回原始数据?

无法在 anaconda 中升级到 scikit-learn v0.22.1

从磁盘加载包含预训练 Keras 模型的 scikit-learn 管道

如何避免 SSE 管道刷新?

scikit-learn - 将管道预测转换为原始值/比例