如何解决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数组,例如FeatureTransform1
和FeatureTransform2
。单独地,它们在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)])
独立工作(即fit
,transform
和fit_transform
都为p1
或p2
工作),并使用生成器或迭代器作为输入。不起作用的是
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 举报,一经查实,本站将立刻删除。