0

我有一个文本分类问题,想添加两个功能。我拥有的数据是电影评论(imbd 数据集)。我想使用两个特征作为输入变量来将评论分类为正面或负面情绪。这两个特征是:评论长度(所以使用的词)和评论的词袋表示。

所以另一件事是我想使用FeatureUnionsklearn 中的对象来完成这个。所以我想出了如何做到这一点,通过使用hstack来连接两个稀疏矩阵。但作为学习目的,我很好奇如何去做,FeatureUnion因为我无法解决。

我到现在使用的资源:

到目前为止,我有以下代码:

from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.feature_extraction.text import CountVectorizer

# Instantiate pipeline: pl
pl = Pipeline([
        ('union', FeatureUnion(
            transformer_list = [
                ('numeric_features', Pipeline([
                    ('extract', ColumnExtractor(cols)),
                    ('length', AverageWordLengthExtractor())
                ])),
                ('text_features', Pipeline([
                    ('vectorizer', CountVectorizer())
                ]))
             ]
        )),
        ('clf', LinearSVC())
    ])

自定义变形金刚:

class AverageWordLengthExtractor(TransformerMixin):
    """Takes in dataframe, extracts road name column, outputs average word length"""

    def review_length(self, review):
        """Helper code to compute length of a review"""
        return len(review.split())

    def fit(self, X, y=None):
        """Returns `self` unless something different happens in train and test"""
        return self

    def transform(self, X, y=None):
        """The workhorse of this feature extractor"""
        return X.apply(self.review_length)

和另一个自定义变压器:

class ColumnExtractor(TransformerMixin):
    """Takes in dataframe, extracts road name column, outputs average word length"""

    def __init__(self, cols):
        self.cols = cols

    def fit(self, X, y=None):
        """Returns `self` unless something different happens in train and test"""
        return self

    def transform(self, X, y=None):
        """The workhorse of this feature extractor"""
        return X[self.cols]

请注意,X_train、y_train、X_test 和 y_test 数据集被转换为 pandas DataFrame,因此管道的输入将是一个数据帧。

我认为问题出在CountVectorizer, 因为它输出一个稀疏矩阵。我应该以 的类型制作自己的自定义转换器CountVectorizer,所以它会返回一个数据框吗?如果是这样,使用大型语料库的计算成本不是很高吗?我真的可以使用一些帮助我有一个想法,我没有得到完整的图片CountVectorizerFeatureUnion课堂上工作。

4

0 回答 0