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'>)#
将一组文本文档转换为标记出现次数的矩阵。
它将一组文本文档转换为保存标记出现次数(或二进制出现信息)的scipy.sparse矩阵,如果norm=’l1’则可能归一化为标记频率,或者如果norm=’l2’则投影到欧几里得单位球上。
这个文本向量化器实现使用哈希技巧来找到标记字符串名称到特征整数索引的映射。
这种策略有几个优点:
它对大型数据集的内存需求非常低,因为不需要在内存中存储词汇字典。
它快速且易于序列化和反序列化,因为它除了构造函数参数外没有其他状态。
它可以在流式(部分拟合)或并行管道中使用,因为在拟合过程中没有计算状态。
与使用带有内存中词汇的CountVectorizer相比,也有一些缺点:
无法计算逆变换(从特征索引到字符串特征名称),这在尝试内省哪些特征对模型最重要时可能是一个问题。
可能存在冲突:不同的标记可以映射到相同的特征索引。然而,在实践中,如果n_features足够大(例如,文本分类问题的2 ** 18),这很少是一个问题。
没有IDF加权,因为这会使转换器有状态。
使用的哈希函数是Murmurhash3的带符号32位版本。
有关不同特征提取器的效率比较,请参见:ref:
sphx_glr_auto_examples_text_plot_hashing_vs_dict_vectorizer.py
。有关文档聚类的示例以及与:class:
~sklearn.feature_extraction.text.TfidfVectorizer
的比较,请参见:ref:sphx_glr_auto_examples_text_plot_document_clustering.py
。更多信息请参见:ref:
用户指南 <text_feature_extraction>
。- Parameters:
- input{‘filename’, ‘file’, ‘content’}, default=’content’
如果
'filename'
,作为参数传递给拟合的序列应为需要读取以获取原始内容进行分析的文件名列表。如果
'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’都使用:func:
unicodedata.normalize
中的NFKD规范化。- lowercasebool, default=True
在分词之前将所有字符转换为小写。
- preprocessorcallable, default=None
覆盖预处理(字符串转换)阶段,同时保留分词和n-grams生成步骤。 仅在
analyzer
不可调用时适用。- tokenizercallable, default=None
覆盖字符串分词步骤,同时保留预处理和n-grams生成步骤。 仅在
analyzer == 'word'
时适用。- stop_words{‘english’}, list, default=None
如果’english’,则使用内置的英语停用词列表。 ‘english’存在几个已知问题,您应考虑使用其他替代方案(见:ref:
stop_words
)。如果是列表,则假定该列表包含停用词,所有这些词都将从生成的标记中删除。 仅在
analyzer == 'word'
时适用。- token_patternstr or None, default=r”(?u)\b\w\w+\b”
表示“标记”的正则表达式,仅在
analyzer == 'word'
时使用。默认正则表达式选择2个或更多字母数字字符的标记(标点符号完全忽略,始终被视为标记分隔符)。如果token_pattern中有一个捕获组,则捕获组内容(而不是整个匹配)成为标记。最多允许一个捕获组。
- ngram_rangetuple (min_n, max_n), default=(1, 1)
要提取的n-grams的下限和上限范围。所有n值,使得min_n <= n <= max_n将被使用。例如,
ngram_range
为(1, 1)
表示只有unigrams,(1, 2)
表示unigrams和bigrams,(2, 2)
表示只有bigrams。 仅在analyzer
不可调用时适用。- analyzer{‘word’, ‘char’, ‘char_wb’} or callable, default=’word’
特征应由词或字符n-grams组成。选项’char_wb’仅从词边界内的文本创建字符n-grams;词边缘的n-grams用空格填充。
如果传递了可调用对象,则用于从原始未处理输入中提取特征序列。
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()返回的矩阵的类型。
See also
CountVectorizer
将一组文本文档转换为标记计数矩阵。
TfidfVectorizer
将一组原始文档转换为TF-IDF特征矩阵。
Notes
这个估计器是无状态的,不需要拟合。然而,我们建议调用:meth:
fit_transform
而不是:meth:transform
,因为参数验证仅在:meth:fit
中执行。Examples
>>> 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()#
返回一个可调用对象来处理输入数据。
该可调用对象处理预处理、标记化和n-grams生成。
- Returns:
- analyzer: callable
一个处理预处理、标记化和n-grams生成的函数。
- build_preprocessor()#
返回一个在分词前预处理文本的函数。
- Returns:
- preprocessor: callable
一个在分词前预处理文本的函数。
- build_tokenizer()#
返回一个将字符串拆分为一系列标记的函数。
- Returns:
- tokenizer: callable
一个将字符串拆分为一系列标记的函数。
- decode(doc)#
解码输入为一个unicode符号字符串。
解码策略取决于向量化器的参数。
- Parameters:
- docbytes 或 str
要解码的字符串。
- Returns:
- doc: str
一个unicode符号字符串。
- fit(X, y=None)#
仅验证估计器的参数。
此方法允许:(i) 验证估计器的参数和 (ii) 与 scikit-learn 转换器 API 保持一致。
- Parameters:
- X形状为 [n_samples, n_features] 的 ndarray
训练数据。
- y忽略
未使用,为保持 API 一致性而存在。
- Returns:
- selfobject
HashingVectorizer 实例。
- fit_transform(X, y=None)#
将一系列文档转换为文档-词矩阵。
- Parameters:
- X原始文本文档的可迭代对象,长度 = n_samples
样本。每个样本必须是一个文本文档(可以是字节或unicode字符串,文件名或文件对象,具体取决于构造函数参数),这些文档将被分词和哈希处理。
- y任意
忽略。此参数仅用于与sklearn.pipeline.Pipeline兼容。
- Returns:
- X形状为 (n_samples, n_features) 的稀疏矩阵
文档-词矩阵。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- get_stop_words()#
构建或获取有效的停用词列表。
- Returns:
- stop_words: list 或 None
一个停用词列表。
- partial_fit(X, y=None)#
仅验证估计器的参数。
此方法允许:(i) 验证估计器的参数和 (ii) 与 scikit-learn 转换器 API 保持一致。
- Parameters:
- X形状为 [n_samples, n_features] 的 ndarray
训练数据。
- y忽略
未使用,为保持 API 一致性而存在。
- Returns:
- selfobject
HashingVectorizer 实例。
- set_output(*, transform=None)#
设置输出容器。
请参阅 介绍 set_output API 以了解如何使用API的示例。
- Parameters:
- transform{“default”, “pandas”, “polars”}, 默认=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
Added in version 1.4:
"polars"
选项已添加。
- Returns:
- self估计器实例
估计器实例。
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)#
将一系列文档转换为文档-词项矩阵。
- Parameters:
- Xiterable over raw text documents, length = n_samples
样本。每个样本必须是一个文本文档(可以是字节或Unicode字符串、文件名或文件对象,具体取决于构造函数的参数),这些文档将被分词和哈希处理。
- Returns:
- Xsparse matrix of shape (n_samples, n_features)
文档-词项矩阵。