gpt4 book ai didi

machine-learning - 如何创建自定义特征提取器函数并将其与 Scikit-learn 管道中的 countvectorizer 一起使用

转载 作者:行者123 更新时间:2023-11-30 09:21:12 25 4
gpt4 key购买 nike

我正在尝试使用 Scikit-learn 创建一个简单的问题分类器。目前,我可以使用 Scikit 的 countvectorizer 函数,使用词袋方法将问题分类为相应的类别。现在我想使用 countvectorizer 生成的现有功能来创建和添加自定义功能。

假设我想创建一个功能来检查电话号码是否存在问题,以及另一个功能来提取问题的长度。

那么如何生成并合并所有特征呢?

从此link我尝试使用此模板进行自定义特征提取

`从 sklearn.base 导入 BaseEstimator、TransformerMixin

类 SampleExtractor(BaseEstimator,TransformerMixin):

def __init__(self, vars):
self.vars = vars # e.g. pass in a column name to extract

def transform(self, X, y=None):
return do_something_to(X, self.vars) # where the actual feature extraction happens

def fit(self, X, y=None):
return self # generally does nothing`

但是当我将其输出放入带有 countvectorizer 的管道时

ppl = Pipeline([
('feats', FeatureUnion([
('ngram', CountVectorizer()), # can pass in either a pipeline
('ave', SampleExtractor()) # or a transformer
])),
('clf', LinearSVC()) # classifier

])

我收到错误

ValueError: blocks[0,:] has incompatible row dimensions

我认为这个错误可能是由于两个特征的矩阵尺寸不同,但我不明白如何解决它。

最佳答案

方法transformCountVectorizer返回一个文档术语矩阵,其中的行对应于文档,列对应于术语。矩阵的第 (i,j) 个元素显示第 j 个术语在第 i 个文档中出现的次数。您所要做的就是在这个矩阵中添加一些与新功能相对应的列。

示例: 假设列表 doc_len包含文档的单词长度,文档术语矩阵为 M 。然后是代码:

M_arr = M.toarray()
assert len(doc_len) == M_arr.shape[0]
np.append(M_arr,np.array(doc_len),axis=1)

将在包含新功能的矩阵末尾添加一个新列。您可以重复此过程以获得其他新功能。扩展矩阵可以输入到您以通常方式使用的任何分类器中。

关于machine-learning - 如何创建自定义特征提取器函数并将其与 Scikit-learn 管道中的 countvectorizer 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com