用CountVectorizer连接自定义特性



我有一堆文章文件。对于每篇文章,应该有一些特性,如:文本长度text_spam(都是整型或浮点数,在大多数情况下,它们应该从csv加载)。我想做的是-将这些特征与CountVectorizer结合起来然后对这些文本进行分类。

我看过一些教程,但我仍然不知道如何实现这个东西。在这里找到了一些东西,但实际上不能实现这个为我的需要。

你知道如何用scikit做到这一点吗?

谢谢。

我现在遇到的是:

from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import FeatureUnion
measurements = [
    {'text_length': 1000, 'text_spam': 4.3},
    {'text_length': 2000, 'text_spam': 4.1},
]
corpus = [
    'some text',
    'some text 2 hooray',
]
vectorizer = DictVectorizer()
count_vectorizer = CountVectorizer(min_df=1)
first_x = vectorizer.fit_transform(measurements)
second_x = count_vectorizer.fit_transform(corpus)
combined_features = FeatureUnion([('first', first_x), ('second', second_x)])

对于这堆代码,我不明白如何加载"real"数据,因为训练集已经加载了。第二个-如何加载类别(y参数适合函数)?

你误解了FeatureUnion。应该取两个变压器,而不是两批样品。

你可以强迫它处理你拥有的矢量器,但更容易的是把所有的特征都扔进一个大袋子里,每个样本使用一个单独的DictVectorizer从这些袋子里得到向量。

# make a CountVectorizer-style tokenizer
tokenize = CountVectorizer().build_tokenizer()
def features(document):
    terms = tokenize(document)
    d = {'text_length': len(terms), 'text_spam': whatever_this_means}
    for t in terms:
        d[t] = d.get(t, 0) + 1
    return d
vect = DictVectorizer()
X_train = vect.fit_transform(features(d) for d in documents)

不要忘记用sklearn.preprocessing.Normalizer对其进行归一化,并且要注意,即使在归一化之后,这些text_length特征在尺度上也必然会主导其他特征。使用1. / text_lengthnp.log(text_length)可能更明智。

和第二个-如何加载类别(y参数适合函数)?

取决于你的数据是如何组织的。Scikit-learn有很多辅助函数和类,但是如果您的设置是非标准的,则需要您编写代码。

相关内容

  • 没有找到相关文章

最新更新