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' 则投影到欧氏单位球体上。
此文本向量化器实现使用哈希技巧来查找词元字符串名称到特征整数索引的映射。
此策略有几个优点
它内存占用非常低,可扩展到大型数据集,因为无需在内存中存储词汇字典。
它能快速进行序列化和反序列化,因为它除了构造函数参数外不持有任何状态。
它可以在流式(部分拟合)或并行管道中使用,因为在拟合过程中不计算任何状态。
也有一些缺点(与使用内存词汇表的 CountVectorizer 相比)
无法计算逆变换(从特征索引到字符串特征名称),这在尝试内省哪些特征对模型最重要时可能会成为问题。
可能存在冲突:不同的词元可以映射到同一个特征索引。然而,如果 n_features 足够大(例如,对于文本分类问题为 2 ** 18),这在实践中很少成为问题。
没有 IDF 加权,因为这会使转换器变为有状态。
使用的哈希函数是 Murmurhash3 的有符号 32 位版本。
有关不同特征提取器效率比较的信息,请参阅 FeatureHasher 和 DictVectorizer 比较。
有关文档聚类示例以及与
TfidfVectorizer
的比较,请参阅 使用 k-means 对文本文档进行聚类。在 用户指南 中阅读更多信息。
- 参数
- input{‘filename’, ‘file’, ‘content’},默认值=’content’
如果为 ‘filename’,传递给 fit 的参数序列应为文件名列表,需要读取这些文件以获取要分析的原始内容。
如果为 ‘file’,序列中的项必须具有一个 ‘read’ 方法(类似文件的对象),调用该方法以将字节获取到内存中。
如果为 ‘content’,输入应为字符串或字节类型的项序列。
- encodingstr,默认值=’utf-8’
如果给出字节或文件进行分析,则使用此编码进行解码。
- decode_error{‘strict’, ‘ignore’, ‘replace’},默认值=’strict’
指定当给定的字节序列包含给定 encoding 中不存在的字符时如何处理。默认为 ‘strict’,表示将引发 UnicodeDecodeError。其他值包括 ‘ignore’ 和 ‘replace’。
- strip_accents{‘ascii’, ‘unicode’} 或 callable,默认值=None
在预处理步骤中移除重音并执行其他字符归一化。‘ascii’ 是一种快速方法,仅适用于具有直接 ASCII 映射的字符。‘unicode’ 是一种稍慢的方法,适用于任何字符。None(默认值)表示不执行字符归一化。
‘ascii’ 和 ‘unicode’ 都使用
unicodedata.normalize()
的 NFKD 归一化。- lowercasebool,默认值=True
在分词之前将所有字符转换为小写。
- preprocessorcallable,默认值=None
覆盖预处理(字符串转换)阶段,同时保留分词和 n-gram 生成步骤。仅当
analyzer
不是 callable 时适用。- tokenizercallable,默认值=None
覆盖字符串分词步骤,同时保留预处理和 n-gram 生成步骤。仅当
analyzer == 'word'
时适用。- stop_words{‘english’},列表,默认值=None
如果为 ‘english’,则使用内置的英文停用词列表。使用 ‘english’ 存在一些已知问题,您应该考虑替代方案(参阅 使用停用词)。
如果是一个列表,则假定该列表包含停用词,所有这些词都将从生成的词元中移除。仅当
analyzer == 'word'
时适用。- token_patternstr 或 None,默认值=r”(?u)\b\w\w+\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)
仅表示 unigram(一元词),(1, 2)
表示 unigram 和 bigram(二元词),而(2, 2)
仅表示 bigram。仅当analyzer
不是 callable 时适用。- analyzer{‘word’, ‘char’, ‘char_wb’} 或 callable,默认值=’word’
特征是基于词 n-gram 还是字符 n-gram。选项 ‘char_wb’ 仅从单词边界内的文本创建字符 n-gram;单词边缘的 n-gram 用空格填充。
如果传入一个 callable,则用于从原始、未处理的输入中提取特征序列。
在版本 0.21 中更改: 从 v0.21 起,如果
input
为'filename'
或'file'
,数据将首先从文件中读取,然后传递给给定的 callable analyzer。- n_featuresint,默认值=(2 ** 20)
输出矩阵中的特征(列)数量。特征数量少可能导致哈希冲突,但数量多会在线性学习器中导致更大的系数维度。
- binarybool,默认值=False
如果为 True,所有非零计数都设置为 1。这对于对二元事件而非整数计数进行建模的离散概率模型非常有用。
- norm{‘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
()返回用于处理输入数据的 callable。
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'>)¶