为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2023-10-26 16:33:16
我正在做一个关于情感分析的基本 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, 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想知道是否还有其他更简单的方法可以做到这一点?
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

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


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


查看完整回答
反对 回复 2023-10-26
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信