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 ',则投影到欧几里得单位球体上。
此文本向量器实现使用哈希技巧来查找标记字符串名称以实现integer索引映射。
该策略有几个优点:
由于不需要在内存中存储词汇字典,因此它的内存非常低,可扩展到大型数据集。
它可以快速pickle和un-pickle,因为它除了构造函数参数之外不保存任何状态。
它可以用于流(部分匹配)或并行流水线,因为在匹配期间不计算状态。
还有几个缺点(与使用具有内存词汇的CountVectorizer相比):
没有办法计算逆变换(从特征索引到字符串特征名称),当试图内省哪些特征对模型最重要时,这可能会成为一个问题。
可能会存在冲突:不同的令牌可以映射到相同的特征索引。然而,在实践中,如果n_features足够大(例如,文本分类问题为2 ** 18),这很少成为问题。
没有IDF加权,因为这会使Transformer有状态。
使用的哈希函数是Murmurhash 3的签名32位版本。
有关不同特征提取器的效率比较,请参阅 收件箱Hasher和DictVectorizer比较 .
有关文档集群的示例并与
TfidfVectorizer
,看到了 基于k-means的文本聚类 .阅读更多的 User Guide .
- 参数:
- input'文件','内容'},默认='内容'
如果
'filename'
,作为参数传递的序列预计是需要读取才能获取原始内容进行分析的文件名列表。如果
'file'
,序列项必须有一个“read”方法(类似文件的对象),调用该方法可以获取内存中的字节。如果
'content'
,输入预计是一个项目序列,可以是字符串或字节类型。
- encoding字符串,默认=' utf-8 '
如果提供字节或文件来分析,则使用此编码来解码。
- decode_error'严格',','替换'},默认='严格'
说明如果提供要分析的字节序列包含不属于给定的字符,该怎么办
encoding
.默认情况下,它是“严格”的,这意味着将引发UnicodeDecodeLock。其他值包括“忽略”和“替换”。- strip_accents' asð ',' unicode '}或可调用,默认=无
在预处理步骤期间删除口音并执行其他字符规范化。“asspel”是一种快速方法,仅适用于具有直接ASC映射的字符。“unicode”是一种稍慢的方法,适用于任何字符。无(默认)意味着不执行字符规范化。
“assummit”和“unicode”都使用NFKD规范化
unicodedata.normalize
.- lowercase布尔,默认=True
在标记化之前将所有角色转换为字形。
- preprocessor可调用,默认值=无
初始化预处理(字符串转换)阶段,同时保留标记化和n-gram生成步骤。仅适用于
analyzer
不可调用。- tokenizer可调用,默认值=无
重新启动字符串标记化步骤,同时保留预处理和n-gram生成步骤。仅适用于
analyzer == 'word'
.- stop_words' english '},列表,默认=无
如果是“english”,则使用内置的英语停止词列表。“英语”有几个已知问题,您应该考虑替代方案(请参阅 使用停止词 ).
如果是列表,则假设该列表包含停止词,所有这些都将从生成的令牌中删除。仅适用于
analyzer == 'word'
.- token_patternstr or None, default=r"(?u)\b\w\w+\b"
表示构成“令牌”的内容的规则表达,仅在以下情况下使用
analyzer == 'word'
.默认regopp选择2个或更多字母数字字符的标记(标点符号被完全忽略并始终被视为标记分隔符)。如果token_pattern中存在捕获组,那么捕获的组内容(而不是整个匹配)将成为令牌。最多允许一个捕获组。
- ngram_rangetuple(min_n,max_n),默认=(1,1)
要提取的不同n元语法的n值范围的下限和上限。将使用min_n <= n <= max_n的所有n值。例如一个
ngram_range
的(1, 1)
仅意味着一元词,(1, 2)
意味着一元和二元,并且(2, 2)
仅意味着二元组合。仅适用于analyzer
不可调用。- analyzer' word ',' char_wb '}或可调用,默认=' word '
特征是否应由单词或字符n元语法组成。选项“char_RST”仅从单词边界内的文本创建字符n-gram;单词边缘的n-gram用空白填充。
如果传递了可调用内容,则使用它从原始、未处理的输入中提取特征序列。
在 0.21 版本发生变更: 自v0.21以来,如果
input
是'filename'
或'file'
,首先从文件中读取数据,然后传递给给定的可调用分析器。- n_featuresint,默认=(2 ** 20)
输出矩阵中的要素(列)数量。少量特征可能会导致哈希冲突,但大量特征会导致线性学习器中的系数维度更大。
- binary布尔,默认=假
如果为True,则所有非零计数均设置为1。这对于建模二元事件而不是整计数的离散概率模型很有用。
- norm' l1 ',',默认=' l2 '
Norm用于规范化项载体。没有代表没有正常化。
- alternate_sign布尔,默认=True
当为True时,将交替符号添加到特征中,以便即使对于小n_特征也大致保留哈希空间中的内能积。这种方法类似于稀疏随机投影。
Added in version 0.19.
- dtype类型,默认=np.float64
fit_transform()或transform()返回的矩阵类型。
参见
CountVectorizer
将文本文档集合转换为令牌计数矩阵。
TfidfVectorizer
将原始文档集合转换为TF-IDF功能矩阵。
注意到
这个估计器是 stateless 并且不需要安装。不过,我们建议致电
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)
- fit(X, y=None)[源代码]#
仅验证估计器的参数。
该方法允许:(i)验证估计器的参数以及(ii)与scikit-learn Transformer API一致。
- 参数:
- X形状数组 [n_samples, n_features]
训练数据。
- y忽视
未使用,按照惯例,为了API一致性而存在。
- 返回:
- self对象
HashingVectorizer实例。
- fit_transform(X, y=None)[源代码]#
将文档序列转换为文档-术语矩阵。
- 参数:
- X可在原始文本文档上迭代,长度= n_samples
样品每个样本必须是一个文本文档(字节或unicode字符串,文件名或文件对象,取决于构造函数参数),它将被标记和散列。
- y任何
忽视此参数仅为与sklearn.pipeline.Pipeline.Pipeline兼容而存在。
- 返回:
- X形状稀疏矩阵(n_samples,n_features)
Document-term matrix.
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- partial_fit(X, y=None)[源代码]#
仅验证估计器的参数。
该方法允许:(i)验证估计器的参数以及(ii)与scikit-learn Transformer API一致。
- 参数:
- X形状数组 [n_samples, n_features]
训练数据。
- y忽视
未使用,按照惯例,为了API一致性而存在。
- 返回:
- self对象
HashingVectorizer实例。
- set_output(*, transform=None)[源代码]#
设置输出容器。
看到 介绍 set_output API 了解如何使用API的示例。
- 参数:
- transform{“默认”,“pandas”,“polars”},默认=无
配置输出
transform
和fit_transform
."default"
:Transformer的默认输出格式"pandas"
:DataFrame输出"polars"
:两极输出None
:转换配置不变
Added in version 1.4:
"polars"
添加了选项。
- 返回:
- self估计器实例
估计实例。