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 or None, default=r”(?u)\b\w\w+\b”

表示“词元”构成的正则表达式,仅在analyzer == 'word'时使用。默认的regexp选择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用空格填充。

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

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

n_featuresint, default=(2 ** 20)

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

binarybool, default=False

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

norm{‘l1’, ‘l2’}, default=’l2’

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

alternate_signbool, default=True

当为True时,为特征添加交替符号,以近似保留哈希空间中的内积,即使对于小的n_features也是如此。这种方法类似于稀疏随机投影。

Added in version 0.19.

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

参数:
Xndarray of shape [n_samples, n_features]

训练数据。

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

返回:
selfobject

HashingVectorizer实例。

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

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

参数:
Xiterable over raw text documents, length = n_samples

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

yany

被忽略。此参数仅用于与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保持一致。

参数:
Xndarray of shape [n_samples, n_features]

训练数据。

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

返回:
selfobject

HashingVectorizer实例。

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

设置输出容器。

有关如何使用 API 的示例,请参阅引入 set_output 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]#

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

参数:
Xiterable over raw text documents, length = n_samples

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

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

文档-词项矩阵。