哈希向量化器#

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',则投影到欧几里得单位球面上。

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

此策略具有以下几个优点:

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

  • 它可以快速进行pickle和un-pickle,因为它除了构造函数参数外不保存任何状态。

  • 它可以用于流式(部分拟合)或并行管道,因为它在拟合过程中没有计算状态。

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

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

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

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

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

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

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

用户指南 中了解更多信息。

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

  • 如果为 'file',则序列项必须具有一个 ‘read’ 方法(类似文件的对象),该方法用于在内存中获取字节。

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

encodingstr, default=’utf-8’

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

decode_error{‘strict’, ‘ignore’, ‘replace’}, default=’strict’

关于如果给出包含非给定 encoding 的字符的字节序列进行分析时该怎么做。默认情况下,它是 ‘strict’,这意味着将引发 UnicodeDecodeError。其他值为 ‘ignore’ 和 ‘replace’。

strip_accents{‘ascii’, ‘unicode’} or callable, default=None

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

“ascii” 和 “unicode” 都使用 unicodedata.normalize 中的 NFKD 规范化。

lowercasebool, default=True

在标记化之前将所有字符转换为小写。

preprocessorcallable, default=None

覆盖预处理(字符串转换)阶段,同时保留标记化和 n 元组生成步骤。仅当 analyzer 不可调用时才适用。

tokenizercallable, default=None

覆盖字符串标记化步骤,同时保留预处理和 n 元组生成步骤。仅当 analyzer == 'word' 时才适用。

stop_words{‘english’}, list, default=None

如果为 ‘english’,则使用英语的内置停用词列表。'english' 有几个已知问题,您应该考虑使用替代方案(请参见 使用停用词)。

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

token_patternstr or None, default=r”(?u)\b\w\w+\b”

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

如果 `token_pattern` 中包含捕获组,则捕获组的内容(而不是整个匹配项)将成为标记。最多允许一个捕获组。

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

用于提取不同 n-gram 的 n 值范围的下限和上限。将使用所有满足 min_n <= n <= max_n 的 n 值。例如,ngram_range(1, 1) 表示仅使用一元语法,(1, 2) 表示使用一元语法和二元语法,(2, 2) 表示仅使用二元语法。仅当 analyzer 不是可调用对象时才适用。

analyzer{'word', 'char', 'char_wb'} 或可调用对象,默认='word'

特征应由词 n-gram 还是字符 n-gram 组成。选项 'char_wb' 仅从单词边界内的文本创建字符 n-gram;单词边缘的 n-gram 用空格填充。

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

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-gram 生成。

返回:
analyzer: 可调用对象

用于处理预处理、标记化和 n-gram 生成的函数。

build_preprocessor()[source]#

返回一个函数,用于在标记化之前预处理文本。

返回:
preprocessor: 可调用对象

用于在标记化之前预处理文本的函数。

build_tokenizer()[source]#

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

返回:
tokenizer: 可调用对象

用于将字符串拆分为标记序列的函数。

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 保持一致而存在。

返回:
self对象

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, default=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 保持一致而存在。

返回:
self对象

HashingVectorizer 实例。

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

设置输出容器。

参见 介绍 set_output API,了解如何使用该 API 的示例。

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

配置transformfit_transform的输出。

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

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 变换配置保持不变

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

返回:
selfestimator 实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator 实例

估计器实例。

transform(X)[source]#

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

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

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

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

文档-词项矩阵。