HashingVectorizer#

class sklearn.feature_extraction.text.HashingVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, token_pattern='(?u)\\b\\w\\w+\\b', ngram_range=(1, 1), analyzer='word', n_features=1048576, binary=False, norm='l2', alternate_sign=True, dtype=<class 'numpy.float64'>)[source]#

将文本文档集合转换为标记出现次数矩阵。

它将文本文档集合转换为一个 scipy.sparse 矩阵,其中包含标记出现次数(或二进制出现信息),如果 norm='l1' 则可能归一化为标记频率,如果 norm='l2' 则投影到欧几里得单位球体上。

此文本向量化器实现使用哈希技巧来查找从标记字符串名称到特征整数索引的映射。

此策略有几个优点:

  • 内存占用非常低,可扩展到大型数据集,因为无需在内存中存储词汇字典。

  • 序列化和反序列化速度快,因为它除了构造函数参数外不持有任何状态。

  • 它可以在流式处理(部分拟合)或并行管道中使用,因为在拟合过程中不计算任何状态。

也有一些缺点(与使用带内存词汇的 CountVectorizer 相比):

  • 无法计算逆变换(从特征索引到字符串特征名称),这在尝试内省哪些特征对模型最重要时可能是一个问题。

  • 可能存在冲突:不同的标记可能映射到相同的特征索引。然而,在实践中,如果 n_features 足够大(例如,对于文本分类问题为 2 ** 18),这很少成为问题。

  • 没有 IDF 权重,因为这会使转换器变为有状态。

所采用的哈希函数是 Murmurhash3 的带符号 32 位版本。

有关不同特征提取器效率的比较,请参见FeatureHasher 和 DictVectorizer 比较

有关文档聚类的示例以及与TfidfVectorizer的比较,请参见使用 k-means 聚类文本文档

用户指南中阅读更多信息。

参数:
input{‘filename’, ‘file’, ‘content’}, 默认值=’content’
  • 如果为 'filename',则作为参数传递给 fit 的序列预计为文件名列表,需要读取以获取要分析的原始内容。

  • 如果为 'file',则序列项必须具有一个“read”方法(类文件对象),该方法被调用以获取内存中的字节。

  • 如果为 'content',则输入预计为字符串或字节类型的序列项。

encodingstr, 默认值=’utf-8’

如果给定字节或文件进行分析,则使用此编码进行解码。

decode_error{‘strict’, ‘ignore’, ‘replace’}, 默认值=’strict’

当给定包含不属于指定 encoding 字符的字节序列进行分析时,应如何处理的指令。默认情况下,为“strict”,这意味着将引发 UnicodeDecodeError。其他值有“ignore”和“replace”。

strip_accents{‘ascii’, ‘unicode’} 或 callable, 默认值=None

在预处理步骤中去除重音并执行其他字符规范化。'ascii' 是一种快速方法,仅适用于具有直接 ASCII 映射的字符。'unicode' 是一种稍慢的方法,适用于任何字符。None(默认)表示不执行字符规范化。

‘ascii’ 和 ‘unicode’ 都使用 unicodedata.normalize 的 NFKD 规范化。

lowercasebool, 默认值=True

在分词之前将所有字符转换为小写。

preprocessorcallable, 默认值=None

覆盖预处理(字符串转换)阶段,同时保留分词和 n-grams 生成步骤。仅当 analyzer 不可调用时适用。

tokenizercallable, 默认值=None

覆盖字符串分词步骤,同时保留预处理和 n-grams 生成步骤。仅当 analyzer == 'word' 时适用。

stop_words{‘english’}, list, 默认值=None

如果为 ‘english’,则使用内置的英语停用词列表。‘english’ 存在一些已知问题,应考虑替代方案(参见使用停用词)。

如果为列表,则假定该列表包含停用词,所有这些词都将从结果标记中移除。仅当 analyzer == 'word' 时适用。

token_patternstr 或 None, 默认值=r”(?u)\b\w\w+\b”

表示“标记”构成的正则表达式,仅当 analyzer == 'word' 时使用。默认的正则表达式选择由 2 个或更多字母数字字符组成的标记(标点符号被完全忽略,并始终被视为标记分隔符)。

如果 token_pattern 中有捕获组,则捕获组内容(而非整个匹配项)成为标记。最多允许一个捕获组。

ngram_range元组 (min_n, max_n), 默认值=(1, 1)

要提取的不同 n-grams 的 n 值范围的下限和上限。将使用所有满足 min_n <= n <= max_n 的 n 值。例如,ngram_range(1, 1) 表示仅使用 unigrams,(1, 2) 表示 unigrams 和 bigrams,(2, 2) 表示仅使用 bigrams。仅当 analyzer 不可调用时适用。

analyzer{‘word’, ‘char’, ‘char_wb’} 或 callable, 默认值=’word’

特征是由词还是字符 n-grams 构成。选项 ‘char_wb’ 仅从词边界内的文本创建字符 n-grams;词边缘的 n-grams 用空格填充。

如果传递了可调用对象,则用于从原始的、未处理的输入中提取特征序列。

0.21 版本中的更改:自 v0.21 起,如果 input'filename''file',则数据首先从文件中读取,然后传递给给定可调用分析器。

n_featuresint, 默认值=(2 ** 20)

输出矩阵中的特征(列)数量。少量特征可能导致哈希冲突,但大量特征将导致线性学习器中更大的系数维度。

binarybool, 默认值=False

如果为 True,所有非零计数都设置为 1。这对于模拟二进制事件而非整数计数的离散概率模型非常有用。

norm{‘l1’, ‘l2’}, 默认值=’l2’

用于归一化词向量的范数。None 表示不归一化。

alternate_signbool, 默认值=True

当为 True 时,在特征中添加交替符号,以便即使对于少量 n_features 也能近似保持哈希空间中的内积。此方法类似于稀疏随机投影。

0.19 版本新增。

dtypetype, 默认值=np.float64

fit_transform()transform() 返回的矩阵类型。

另请参见

CountVectorizer

将文本文档集合转换为标记计数矩阵。

TfidfVectorizer

将原始文档集合转换为 TF-IDF 特征矩阵。

注意事项

此估计器是无状态的,不需要拟合。然而,我们建议调用 fit_transform 而不是 transform,因为参数验证只在 fit 中执行。

示例

>>> from sklearn.feature_extraction.text import HashingVectorizer
>>> corpus = [
...     'This is the first document.',
...     'This document is the second document.',
...     'And this is the third one.',
...     'Is this the first document?',
... ]
>>> vectorizer = HashingVectorizer(n_features=2**4)
>>> X = vectorizer.fit_transform(corpus)
>>> print(X.shape)
(4, 16)
build_analyzer()[source]#

返回一个可调用对象来处理输入数据。

该可调用对象处理预处理、分词和 n-grams 生成。

返回:
analyzer: callable

一个处理预处理、分词和 n-grams 生成的函数。

build_preprocessor()[source]#

返回一个在分词前预处理文本的函数。

返回:
preprocessor: callable

一个在分词前预处理文本的函数。

build_tokenizer()[source]#

返回一个将字符串拆分为标记序列的函数。

返回:
tokenizer: callable

一个将字符串拆分为标记序列的函数。

decode(doc)[source]#

将输入解码为 Unicode 符号字符串。

解码策略取决于向量化器参数。

参数:
docbytes 或 str

要解码的字符串。

返回:
doc: str

一个 Unicode 符号字符串。

fit(X, y=None)[source]#

仅验证估计器的参数。

此方法允许:(i) 验证估计器的参数,以及 (ii) 与 scikit-learn 转换器 API 保持一致。

参数:
X形状为 [n_samples, n_features] 的 ndarray

训练数据。

y被忽略

未被使用,按照约定为 API 兼容性而存在。

返回:
selfobject

HashingVectorizer 实例。

fit_transform(X, y=None)[source]#

将文档序列转换为文档-词项矩阵。

参数:
X原始文本文档的可迭代对象,长度 = n_samples

样本。每个样本必须是一个文本文档(根据构造函数参数,可以是字节或 Unicode 字符串、文件名或文件对象),它将被分词和哈希。

y任意

被忽略。此参数仅为与 sklearn.pipeline.Pipeline 兼容而存在。

返回:
X形状为 (n_samples, n_features) 的稀疏矩阵

文档-词项矩阵。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南,了解路由机制如何工作。

返回:
routingMetadataRequest

一个封装路由信息的 MetadataRequest 对象。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, 默认值=True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

get_stop_words()[source]#

构建或获取有效的停用词列表。

返回:
stop_words: list 或 None

一个停用词列表。

partial_fit(X, y=None)[source]#

仅验证估计器的参数。

此方法允许:(i) 验证估计器的参数,以及 (ii) 与 scikit-learn 转换器 API 保持一致。

参数:
X形状为 [n_samples, n_features] 的 ndarray

训练数据。

y被忽略

未被使用,按照约定为 API 兼容性而存在。

返回:
selfobject

HashingVectorizer 实例。

set_output(*, transform=None)[source]#

设置输出容器。

有关如何使用 API 的示例,请参阅Introducing the set_output API

参数:
transform{“default”, “pandas”, “polars”}, 默认值=None

配置 transformfit_transform 的输出。

  • "default": 转换器的默认输出格式

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 转换配置不变

1.4 版本新增:添加了 "polars" 选项。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[source]#

将文档序列转换为文档-词项矩阵。

参数:
X原始文本文档的可迭代对象,长度 = n_samples

样本。每个样本必须是一个文本文档(根据构造函数参数,可以是字节或 Unicode 字符串、文件名或文件对象),它将被分词和哈希。

返回:
X形状为 (n_samples, n_features) 的稀疏矩阵

文档-词项矩阵。