sklearn的FeatureUnion是否有可能与生成器或迭代器一起使用?

问题描述

我正在尝试从sklearn实施FeaturesUnion来进行一些文本预处理。我需要以生成器或迭代器的形式发送大型数据(例如,逐行获取大型数据库,计算要素,然后在要素数组上运行分类器)。

似乎FeatureUnion使用joblib.parallel禁止了此问题。显示问题的一个简单示例是

from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA,TruncatedSVD
union = FeatureUnion([("pca",PCA(n_components=1)),("svd",TruncatedSVD(n_components=2))])
X = [[0.,1.,3],[2.,2.,5]]
union.fit_transform(x for x in X)

改编自exemple from sklearn documentation;刚刚在最后一行中将X更改为x for x in X

有没有办法克服这个限制?

更多详细信息:

我实际上运行了两个手动构造的特征转换器,它们使用一个字符串并返回numpy数组,例如FeatureTransform1FeatureTransform2。单独地,它们在sklearn.pipeline.Pipeline对象中很好地工作,即

p1 = sklearn.pipeline.Pipeline([('ft1',FeatureTransform1()),('cluster',sklearn.cluster.Kmeans(n_clusters=2)])
p2 = sklearn.pipeline.Pipeline([('ft2',FeatureTransform2()),sklearn.cluster.Kmeans(n_clusters=2)])

独立工作(即fittransformfit_transform都为p1p2工作),并使用生成器或迭代器作为输入。不起作用的是

feat_union= sklearn.pipeline.FeatureUnion([('ft1',('ft2',FeatureTransform2())])
pipeline = sklearn.pipeline.Pipeline([('feature',feat_union),sklearn.cluster.Kmeans(n_clusters=2)])

仅在将生成器或迭代器作为输入数据传递时,即pipeline.fit_transform(x for x in X)不起作用。传递完整列表或数组是可行的,即pipeline.fit_transform(X)完全可行。

我的sklearn版本是0.23.1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)