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

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

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

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

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

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

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

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

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

  • 不进行IDF加权,因为这会使转换器变为有状态。

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

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

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

用户指南 中阅读更多内容。

参数:
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-gram生成步骤。仅在 analyzer 不可调用时适用。

tokenizercallable, default=None

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

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

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

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

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

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

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

ngram_rangetuple (min_n, max_n), default=(1, 1)

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

analyzer{‘word’, ‘char’, ‘char_wb’} or callable, default=’word’

特征是否应由词或字符n-gram构成。选项“char_wb”仅从词边界内的文本创建字符n-gram;词边缘的n-gram用空格填充。

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

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

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

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

binarybool, default=False

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

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

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

alternate_signbool,默认值=True

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

Added in version 0.19.

dtype类型,默认值=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: callable

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

build_preprocessor()[source]#

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

返回:
preprocessor: callable

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

build_tokenizer()[source]#

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

返回:
tokenizer: callable

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

decode(doc)[source]#

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

解码策略取决于 vectorizer 参数。

参数:
docbytes or 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 的兼容性而存在。

返回:
Xsparse matrix of shape (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 or 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]#

设置输出容器。

请参阅 用户指南 以了解更多详细信息,并参考 引入 set_output API 获取关于如何使用该 API 的示例。

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

配置 transformfit_transform 的输出。

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

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 转换配置保持不变

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

返回:
selfestimator instance

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

transform(X)[source]#

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

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

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

返回:
Xsparse matrix of shape (n_samples, n_features)

文档-词项矩阵。