我正在努力实现对由句子组成的训练数据执行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函数,因为在这种情况下我有一个数字列表。
何时应该使用变换功能?
我是否可以了解如何使用功能联合。
感谢任何帮助。
答案 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)