dask_ml.feature_extraction.text.HashingVectorizer
dask_ml.feature_extraction.text
.HashingVectorizer¶
- class dask_ml.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’ 则可能投影到欧几里得单位球面上。
这个文本向量化实现使用哈希技巧来找到令牌字符串名称到特征整数索引的映射。
这种策略有几个优点:
它对大型数据集的内存占用非常低,因为不需要在内存中存储词汇字典。
它快速地进行pickle和un-pickle,因为它除了构造函数参数外不持有任何状态。
它可以在流式(部分拟合)或并行管道中使用,因为在拟合过程中没有计算状态。
也有一些缺点(相对于使用带有内存词汇表的 CountVectorizer):
无法计算逆变换(从特征索引到字符串特征名称),这在尝试内省哪些特征对模型最重要时可能成为一个问题。
可能会发生冲突:不同的标记可以映射到相同的特征索引。然而在实践中,如果 n_features 足够大(例如,对于文本分类问题,2 ** 18),这很少会成为问题。
不使用IDF加权,因为这会使transformer具有状态性。
所使用的哈希函数是 Murmurhash3 的带符号 32 位版本。
关于不同特征提取器的效率比较,请参见 FeatureHasher and DictVectorizer Comparison。
有关文档聚类及与
TfidfVectorizer
比较的示例,请参见 Clustering text documents using k-means。更多信息请参阅 用户指南。
- 参数
- 输入{‘filename’, ‘file’, ‘content’}, 默认=’content’
如果 ‘filename’,传递给 fit 的参数序列应为需要读取以获取原始内容进行分析的文件名列表。
如果 ‘file’,序列项必须有一个 ‘read’ 方法(类似文件的对象),该方法被调用来获取内存中的字节。
如果 ‘content’,输入应为字符串或字节类型的项目序列。
- 编码str, 默认=’utf-8’
如果给定字节或文件进行分析,则使用此编码进行解码。
- 解码错误{‘strict’, ‘ignore’, ‘replace’}, 默认=’strict’
如果给定的字节序列包含不属于指定 编码 的字符,该如何处理的说明。默认情况下,它是 ‘strict’,这意味着将引发 UnicodeDecodeError。其他值是 ‘ignore’ 和 ‘replace’。
- strip_accents{‘ascii’, ‘unicode’} 或可调用对象,默认=None
在预处理步骤中移除重音符号并执行其他字符规范化。’ascii’ 是一种快速方法,仅适用于有直接 ASCII 映射的字符。’unicode’ 是一种稍慢的方法,适用于任何字符。None(默认)表示不执行字符规范化。
ascii
和unicode
都使用来自unicodedata.normalize()
的 NFKD 规范化。- 小写bool, 默认=True
在分词之前将所有字符转换为小写。
- 预处理器可调用对象,默认=None
在保留分词和n-grams生成步骤的同时,覆盖预处理(字符串转换)阶段。仅在
analyzer
不可调用时适用。- 分词器可调用对象,默认=None
在保留预处理和n-gram生成步骤的同时,覆盖字符串分词步骤。仅在
analyzer == 'word'
时适用。- 停用词{‘english’}, 列表, 默认=None
如果选择 ‘english’,将使用内置的英文停用词列表。’english’ 存在几个已知问题,你应该考虑使用其他替代方案(参见 Using stop words)。
如果是一个列表,则该列表被假定为包含停用词,所有这些停用词都将从生成的标记中移除。仅在
analyzer == 'word'
时适用。- token_pattern : str 或 None, 默认=r”(?u)bww+b”str 或 None, 默认=r”(?u)bww+b”
正则表达式,表示什么构成一个“标记”,仅在
analyzer == 'word'
时使用。默认的正则表达式选择由2个或更多字母数字字符组成的标记(标点符号完全被忽略,并且始终被视为标记分隔符)。如果在 token_pattern 中有一个捕获组,那么捕获组的内容(而不是整个匹配)将成为标记。最多允许一个捕获组。
- ngram_rangetuple (min_n, max_n), 默认=(1, 1)
要提取的不同 n-gram 的 n 值范围的下限和上限。所有满足 min_n <= n <= max_n 的 n 值都将被使用。例如,
ngram_range
为(1, 1)
表示仅使用 unigrams,(1, 2)
表示使用 unigrams 和 bigrams,而(2, 2)
表示仅使用 bigrams。仅在analyzer
不可调用时适用。- 分析器{‘word’, ‘char’, ‘char_wb’} 或可调用对象,默认=’word’
特征是否应由词或字符n-gram构成。选项’char_wb’仅从词边界内的文本创建字符n-gram;词边缘的n-gram用空格填充。
如果传递了一个可调用对象,它将用于从原始的、未处理的输入中提取特征序列。
在 0.21 版更改: 自 v0.21 版本起,如果
input
是'filename'
或'file'
,数据首先从文件中读取,然后传递给指定的可调用分析器。- n_featuresint, 默认值=(2 ** 20)
输出矩阵中的特征(列)数量。较少的特征数量可能会导致哈希冲突,但较多的特征数量会导致线性学习器中系数维度的增加。
- 二进制bool, 默认=False
如果为 True,所有非零计数都被设置为 1。这对于建模二元事件而不是整数计数的离散概率模型非常有用。
- 规范{‘l1’, ‘l2’}, 默认=’l2’
用于归一化词向量的范数。无归一化则为 None。
- alternate_signbool, 默认=True
当为 True 时,特征会添加交替符号,以在哈希空间中近似保留内积,即使对于小的 n_features 也是如此。这种方法类似于稀疏随机投影。
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
()返回一个可调用对象来处理输入数据。
build_preprocessor
()返回一个函数,用于在分词前预处理文本。
build_tokenizer
()返回一个将字符串分割成一系列标记的函数。
decode
(doc)将输入解码为一系列 Unicode 符号。
fit
(X[, y])仅验证估计器的参数。
fit_transform
(X[, y])将一系列文档转换为文档-词项矩阵。
get_metadata_routing
()获取此对象的元数据路由。
get_params
([deep])获取此估计器的参数。
get_stop_words
()构建或获取有效的停用词列表。
partial_fit
(X[, y])仅验证估计器的参数。
set_output
(*[, transform])设置输出容器。
set_params
(**params)设置此估计器的参数。
set_transform_request
(*[, raw_X])传递给
transform
方法的请求元数据。transform
(raw_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=(1, 1), analyzer='word', n_features=1048576, binary=False, norm='l2', alternate_sign=True, dtype=<class 'numpy.float64'>)[源代码]¶