Gridsearch for NLP - 如何结合 CountVec 和其他功能?

我正在做一个关于情感分析的基本 NLP 项目,我想使用 GridsearchCV 来优化我的模型。


下面的代码显示了我正在使用的示例数据框。“Content”是要传递给 CountVectorizer 的列,“label”是要预测的 y 列,feature_1、feature_2 也是我希望包含在模型中的列。


'content': 'Got flat way today Pot hole Another thing tick crap thing happen week list',

'feature_1': '1', 

'feature_2': '34', 

'label':1}, 

{'content': 'UP today Why doe head hurt badly',

'feature_1': '5', 

'feature_2': '142', 

'label':1},

{'content': 'spray tan fail leg foot Ive scrubbing foot look better ',

 'feature_1': '7', 

'feature_2': '123', 

'label':0},])

我正在关注 stackoverflow 的答案:使用管道和网格搜索执行功能选择

from sklearn.pipeline import FeatureUnion, Pipeline

from sklearn.base import TransformerMixin, BaseEstimator

class CustomFeatureExtractor(BaseEstimator, TransformerMixin):

    def __init__(self, feature_1=True, feature_2=True):

        self.feature_1=feature_1

        self.feature_2=feature_2

        

    def extractor(self, tweet):

        features = []


        if self.feature_2:

            

            features.append(df['feature_2'])


        if self.feature_1:

            features.append(df['feature_1'])

        

          

        return np.array(features)


    def fit(self, raw_docs, y):

        return self


    def transform(self, raw_docs):

        

        return np.vstack(tuple([self.extractor(tweet) for tweet in raw_docs]))


下面是我尝试将数据框放入的网格搜索:


lr = LogisticRegression()


# Pipeline

pipe = Pipeline([('features', FeatureUnion([("vectorizer", CountVectorizer(df['content'])),

                                            ("extractor", CustomFeatureExtractor())]))

                 ,('classifier', lr())

                ])

But yields results: TypeError: 'LogisticRegression' object is not callable


想知道是否还有其他更简单的方法可以做到这一点?


郎朗坤
浏览 105回答 1
1回答

catspeake

from sklearn.pipeline import FeatureUnion, Pipelinefrom sklearn.base import TransformerMixin, BaseEstimatorclass CustomFeatureExtractor(BaseEstimator, TransformerMixin):    def __init__(self, feature_1=True, feature_2=True):        self.feature_1=feature_1        self.feature_2=feature_2            def extractor(self, tweet):        features = []        if self.feature_2:                        features.append(df['feature_2'])        if self.feature_1:            features.append(df['feature_1'])                          return np.array(features)    def fit(self, raw_docs, y):        return self    def transform(self, raw_docs):                return np.vstack(tuple([self.extractor(tweet) for tweet in raw_docs]))下面是我尝试将数据框放入的网格搜索:lr = LogisticRegression()# Pipelinepipe = Pipeline([('features', FeatureUnion([("vectorizer", CountVectorizer(df['content'])),                                            ("extractor", CustomFeatureExtractor())]))                 ,('classifier', lr())                ])But yields results: TypeError: 'LogisticRegression' object is not callable想知道是否还有其他更简单的方法可以做到这一点?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python