微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。