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矩陣。