大家好! 我是机器学习和sklearn的新手(也不是一个强大的程序员)。 我目前正在制作电子邮件分类器,我想为CountVectorizer提供的功能添加一些其他功能。所以我构建了一个这样的自定义变换器:
class ExtraFeaturesTransformer(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X):
features = []
for x in X:
features.append([....])
return features
然后我结合了这些功能
vectorizer = CountVectorizer(input='filename')
combined_features = FeatureUnion([("extra_features", ExtraFeaturesTransformer()), ("word_feactures", vectorizer)])
X = combined_features.fit_transform(filenames)
结果我的自定义变换器处理像X这样的文件名(显然)。如何让它像CountVectorizer一样工作,它有参数input =' filename'?
我试着查看CountVectorizer源代码(对我来说没什么意义),并将VectorizerMixin添加到我的变换器继承的类列表和self.input到init。但是我被困住了,不知道接下来该做什么。
答案 0 :(得分:1)
解决方案是定义__init__
方法,并将除了通常{{1}之外计划在fit
/ transform
函数中使用的任何参数传递给它输入。见this part of CountVectorizer code for inspiration
P.S。它看起来像一个普通的python问题,而不是一个sklearn问题。
P.P.S.我不确定你是否需要从X
派生,除非你计划与该类相关的任何函数