我正在尝试在由句子组成的训练数据上执行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的拟合函数,然后调用 kmeans 的拟合函数。
我只是在 fit 函数中返回 OtherFeatures 类对象,所以应该在转换函数中做什么才能从 fit 函数中使用,因为在这种情况下我有一个数字列表。
另外什么时候应该使用转换函数?
我可以了解如何使用功能联合吗?
任何帮助,不胜感激。
找到一种方法,即将模型传递给特征联合类的构造函数,然后将其拟合到适合函数中,并在转换类中为传递的模型应用变换。还有其他解决方案吗?
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)