我正在对一些文档进行二进制分类,这些文档的特征已经被提取出来并在文本文件中给出。我的问题是有文本特征和数字特征,比如年份等。 以下格式给出了一个示例:
label |title text |otherText text |numFeature1 number |numFeature2 number
我遵循了关于feature unions的文档,但是它们的用例有点不同。我不从另一个特征中提取特征,因为这些数值特征已经给出了。在
目前我正在以以下方式使用设置:
^{pr2}$要素类也取自文档:
class Features(BaseEstimator, TransformerMixin):
def fit(self, x, y=None):
return self
def transform(self, posts):
features = np.recarray(shape=(len(posts),),
dtype=[('title', object),('otherText', object),
('numFeature1', object),('numFeature2', object)])
for i, text in enumerate(posts):
l = re.split("\|\w+", text)
features['title'][i] = l[1]
features['otherText'][i] = l[2]
features['numFeature1'][i] = l[3]
features['numFeature2'][i] = l[4]
return features
我现在的问题是:如何将数字特征添加到FeatureUnion中?当使用CountVectorizer时,我得到“ValueError:emptyvography;也许文档只包含停止词”,而使用只有一个条目的DictVectorizer并不适合我。在
ItemSelector()的作用是,根据构造函数中提供的
dict
(X)从给定的dict
(X)中拾取数据,并返回一个一维[n,]
数组。在此类型的
[n,]
数组没有被FeatureUnion
正确处理。FeatureUnion
需要从每个内部transformers
中的每个维度组成一个数组,其中第一个维度(样本数)应该是一致的,最后可以水平堆叠以组合特征。在前两个转换器(
TfidfVectorizer()
)中的第二个操作从ItemSelector获取这个[n,]
数组,并输出一个有效的[n,m]
类型的数组,其中m = number of features extracted from raw text
。在但是第三个和第四个变压器只包含个
ItemSelector()
,所以它输出[n,]
数组。这就是错误的原因。在为了纠正这一点,您应该将
ItemSelector
的输出重塑为[n,1]
。 更改ItemSelector.transform()
(我假设您使用的是来自指定链接的ItemSelector代码):原版
新增
^{pr2}$reshape()
将把你的[n,]
格式化为[n,1]
,然后FeatureUnion可以使用它来正确地附加数据。在TfidfVectorizer()
对象尚未安装数据。在在建造管道之前,请执行以下操作-
如果您想再次调整数据以用于测试目的,这有助于。。。因为对于测试数据,管道将自动对
TfidfVectorizer
使用transform()函数,而不是fit()函数,这是在构造管道之前必须显式执行的相关问题 更多 >
编程相关推荐