sklearn.feature_extraction.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=(11), analyzer='word', n_features=1048576, binary=False, norm='l2', alternate_sign=True, dtype=<class 'numpy.float64'>)

[源码]

将文本文档集合转换为符号出现的矩阵

它将文本文档集合转换为scipy。保留令牌出现计数(或二进制出现信息)的稀疏矩阵,如果范数= ' l1 ',则可能归一化为令牌频率;如果范数= ' l2 ',则可能投影到欧氏单位球面上。

这个文本矢量器实现使用散列技巧来查找标记字符串名称以实现整数索引映射。

这种策略有几个优点:

  • 它的内存非常低,可扩展到大型数据集,因为不需要在内存中存储词汇字典
  • 它可以快速地pickle和解pickle,因为除了构造函数参数之外,它不包含任何状态
  • 它可以在流(部分fit)或并行管道中使用,因为在fit期间没有计算状态。

也有一些缺点(vs使用CountVectorizer与内存词汇表):

  • 没有办法计算逆变换(从特征索引到字符串特征名称),这可能是一个问题,当试图内省哪些特征是最重要的模型。
  • 可能会有冲突:不同的令牌可以映射到相同的特性索引。然而,在实践中,如果n_features足够大(例如,文本分类问题是2 ** 18),这很少会成为一个问题。
  • 没有IDF权重,因为这会使转换器有状态。

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

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

参数 说明
input string {‘filename’, ‘file’, ‘content’}, default=’content’
如果“filename”,作为参数传递给fit的序列应该是一个文件名列表,需要读取这些文件名以获取要分析的原始内容。

如果“file”,序列项必须有一个“read”方法(类文件对象),该方法被调用来获取内存中的字节。

否则,输入应该是一个项目序列,类型可以是string或byte。

encodingstring默认=“utf - 8”
如果字节或文件被给予分析,这种编码被用来解码。
encoding string, default=’utf-8’
如果字节或文件被给予分析,这种编码被用来解码。
decode_error {‘strict’, ‘ignore’, ‘replace’}, default=’strict’
说明如果给定要分析的字节序列包含不属于给定编码的字符,该做什么。默认情况下,它是“严格的”,这意味着将引发一个UnicodeDecodeError。其他值还有“ignore”和“replace”。
strip_accents {‘ascii’, ‘unicode’}, default=None
在预处理步骤中删除重音符号并执行其他字符规范化。' ascii '是一种快速的方法,只对有直接ascii映射的字符有效。“unicode”是一种稍微慢一些的方法,适用于任何字符。None(默认)不执行任何操作。

' ascii '和' unicode '都使用NFKD标准化从unicodedata.normalize。
lowercase bool, default=True
在标记之前将所有字符转换为小写。
preprocessor callable, default=None
重写预处理(字符串转换)阶段,同时保留记号化和n字元生成步骤。仅在分析器不可调用时应用。
tokenizer callable, default=None
重写字符串记号化步骤,同时保留预处理和n字元生成步骤。只适用于analyzer == 'word'。
stop_words string {‘english’}, list, default=None
如果“english”,则使用内置的英语停止词列表。“英语”有几个已知的问题,你应该考虑另一种选择(参见Using stop words)。

如果一个列表,则假定该列表包含停止词,所有这些词都将从结果标记中删除。只适用于analyzer == 'word'
token_pattern string
表示什么构成了“记号”的正则表达式,仅在analyzer == 'word'时使用。默认的regexp选择2个或更多字母数字字符的标记(标点完全被忽略,总是作为标记分隔符处理)。
ngram_range tuple (min_n, max_n), default=(1, 1)
待提取的不同n克n值范围的上、下边界。使用min_n <= n <= max_n的所有n值。例如,ngram_range的(1,1)表示仅使用双字符,(1,2)表示单字符和双字符,(2,2)表示仅使用双字符。仅在分析器不可调用时应用。
analyzer string, {‘word’, ‘char’, ‘char_wb’} or callable, default=’word’
特征是由单词还是由n字组成。选择“char_wb”创建角色- gram只从文本单词边界;字格词带的边缘空间。

如果传递了callable,则使用它从原始的、未处理的输入中提取特性序列。
在0.21版本中进行了更改。

由于v0.21,如果输入是文件名或文件,则首先从文件读取数据,然后传递给给定的可调用分析器。
n_features int, default=(2 \ 20)
输出矩阵中的特征数(列)。在线性学习中,特征数小容易引起哈希冲突,而特征数大则系数维数大。
binary bool, default=False.
如果为真,则将所有非零计数设置为1。这对于建模二进制事件而不是整数计数的离散概率模型是有用的。
norm {‘l1’, ‘l2’}, default=’l2’
用于对术语向量进行标准化的范数。没有归一化。
alternate_sign bool, default=True
当为真时,将向特性添加一个交替符号,以便即使对于较小的n_features,也能在散列空间中近似地保留内积。这种方法类似于稀疏随机投影。

新版本为0.19。
dtype type, default=np.float64
fit_transform()transform()返回的矩阵的类型。

另见: CountVectorizer, TfidfVectorizer

示例

>>> 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)
(416)

方法

方法 说明
build_analyzer() 返回处理预处理、记号化和生成n个符号的可调用函数。
build_preprocessor() 返回一个函数,用于在标记之前对文本进行预处理。
build_tokenizer() 返回一个函数,该函数将字符串分割为一系列标记。
decode(doc) 将输入解码为unicode符号字符串。
fit(X[, y]) 什么也不做:这个转换器是无状态的。
fit_transform(X[, y]) 将文档序列转换为文档术语矩阵。
get_params([deep]) 获取这个估计器的参数。
get_stop_words() 构建或获取有效停止词列表。
partial_fit(X[, y]) 什么也不做:这个转换器是无状态的。
set_params(**params) 设置的参数估计量。
transform(X) 将文档序列转换为文档术语矩阵。
__init__(*, 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=(11), analyzer='word', n_features=1048576, binary=False, norm='l2', alternate_sign=True, dtype=<class 'numpy.float64'>)

[源码]

初始化self. See 请参阅help(type(self))以获得准确的说明。

build_analyzer() 

[源码]

返回处理预处理、记号化和生成n个符号的可调用函数。

返回值 说明
analyzer callable
一个处理预处理、记号化和生成n字的函数。
build_preprocessor()

[源码]

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

返回值 说明
preprocessor callable
用于在标记化之前对文本进行预处理的函数。
build_tokenizer()

[源码]

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

返回值 说明
tokenizer callable
一种函数,用于将字符串分割为一系列标记。
decode(doc)

[源码]

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

译码策略取决于矢量化器的参数。

参数 说明
doc str
要解码的字符串。
返回值 说明
doc str
一串unicode符号。
fit(X, y=None)[source]

[源码]

什么也不做:这个转换器是无状态的。

参数 说明
X ndarray of shape [n_samples, n_features]
训练数据。
fit_transform(X, y=None)

[源码]

将文档序列转换为文档术语矩阵。

参数 说明
X iterable over raw text documents, length = n_samples
样本。每个示例必须是一个文本文档(字节或unicode字符串、文件名或文件对象,这取决于构造函数参数),它将被标记和散列。
y any
忽略了。此参数的存在只是为了与sklearn.pipeline.Pipeline兼容。
返回值 说明
X sparse matrix of shape (n_samples, n_features)
Document-term矩阵。
get_stop_words()

[源码]

构建或获取有效停止词列表。

返回值 说明
stop_words list or None
停止词的列表。
partial_fit(X, y=None)

[源码]

什么也不做:这个转换器是无状态的。

这个方法只是为了说明这个转换器可以在流设置中工作。

参数 说明
X ndarray of shape [n_samples, n_features]
训练数据。
set_params(**params)

[源码]

设置这个估计器的参数。

该方法适用于简单估计量和嵌套对象。后者具有形式为<component>_<parameter>的参数,这样就让更新嵌套对象的每个样本成为了可能。

参数 说明
**params dict
估计器参数。
返回值 说明
self object
估计器实例。
transform(X)

[源码]

将文档序列转换为文档术语矩阵。

参数 说明
X iterable over raw text documents, length = n_samples
样本。每个示例必须是一个文本文档(字节或unicode字符串、文件名或文件对象,这取决于构造函数参数),它将被标记和散列。
返回值 说明
X sparse matrix of shape (n_samples, n_features)
Document-term矩阵。