问题描述
我正在尝试从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 (将#修改为@)