正确执行TFidf和自定义类的功能联合的方法返回数字列表

时间:2016-02-17 08:40:56

标签: python scikit-learn

我正在努力实现对由句子组成的训练数据执行tfidf的功能联合。与此同时,我希望对句子执行一些计算,以获得将返回数值的某些特征。

在OtherFeatures类中,我需要了解如何定义拟合和变换函数,以便我可以相应地训练数据和集群以获得测试数据。

class OtherFeatures(BaseEstimator, TransformerMixin):       
    def OtherFeatures(self,input):
        ret = []
        for i in input:
           ret.append( Do Something )
        return ret

    def fit(self, X_input=None, y=None):
        self.other_features_list = self.otherFeatures(X_input)
        return self

    def transform(self, X_input=None):
        X_output = self.otherFeatures(X_input)
        return X_output


feature_union = FeatureUnion([('TfIdf', TfidfVectorizer(min_df=1, max_df=0.9, ngram_range=(1, 4), strip_accents='unicode', norm='l2')),('OtherFeatures', OtherFeatures())])

km=KMeans(n_clusters=5, n_init=5,init='k-means++') 

feature_pipeline = Pipeline([('feature_union', feature_union),("km",km)]) 

km=feature_pipeline.fit(X1) 

管道调用功能联合,然后kmeans群集。

正如我想到的那样,行feature_pipeline.fit(X1)首先调用feature_union的fit函数,然后调用kmeans的fit函数。

我只是在fit函数中返回OtherFeatures类对象,所以应该在transform函数中使用fit函数,因为在这种情况下我有一个数字列表。

何时应该使用变换功能?

我是否可以了解如何使用功能联合。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

找到一种方法,即将模型传递给要素联合类的构造函数,然后将其拟合到拟合函数中,并在传递的模型的变换类中应用变换。还有其他解决方案。

class OtherFeatures(BaseEstimator, TransformerMixin):       
    def __init__(self,model):
        self.model = model

    def other_features(self,input):
        ret = []
        for i in input:
           ret.append( Do Something )
        return ret

    def fit(self, X_input=None, y=None):
        self.other_features_list = self.other_features(X_input)
        self.model.fit(self.other_features_list,y)
        return self

    def transform(self, X_input=None):
        X_output = self.otherFeatures(X_input)
        X_output = self.model.transform(X_output)
        return X_output


km=KMeans(n_clusters=5, n_init=5,init='k-means++') 
km_inside=KMeans(n_clusters=5, n_init=5,init='k-means++') 
feature_union = FeatureUnion([('TfIdf', TfidfVectorizer(min_df=1, max_df=0.9, ngram_range=(1, 4), strip_accents='unicode', norm='l2')),('OtherFeatures', OtherFeatures(km_inside))])

feature_pipeline = Pipeline([('feature_union', feature_union),("km",km)]) 

km=feature_pipeline.fit(X1)