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' 則投影到歐幾里得單位球體上。

這個文字向量化器實作使用雜湊技巧來尋找符記字串名稱到特徵整數索引的映射。

這個策略有幾個優點

  • 它在記憶體方面非常低,可以擴展到大型資料集,因為不需要在記憶體中儲存詞彙字典。

  • 它快速進行封裝和解封裝,因為它除了建構函式參數外沒有狀態。

  • 它可以在串流(部分擬合)或平行管線中使用,因為在擬合期間沒有計算狀態。

還有一些缺點(相較於使用具有記憶體內詞彙的 CountVectorizer)

  • 無法計算反向轉換(從特徵索引到字串特徵名稱),這在嘗試檢視哪些特徵對於模型最重要時可能會是一個問題。

  • 可能會有衝突:不同的符記可以映射到相同的特徵索引。但是,實際上,如果 n_features 夠大(例如,文字分類問題為 2 ** 18),這很少會成為問題。

  • 沒有 IDF 加權,因為這會使轉換器成為有狀態的。

使用的雜湊函數是 Murmurhash3 的帶符號 32 位元版本。

如需不同特徵提取器的效率比較,請參閱 FeatureHasher 和 DictVectorizer 比較

如需文件叢集和與 TfidfVectorizer 比較的範例,請參閱 使用 k 平均值叢集文字文件

使用者指南 中閱讀更多資訊。

參數:
input{‘filename’, ‘file’, ‘content’}, 預設值=’content’
  • 如果 'filename',則傳遞給擬合的引數序列預期是需要讀取的檔案名稱列表,以擷取要分析的原始內容。

  • 如果 'file',則序列項目必須具有「read」方法(類檔案物件),該方法會被呼叫以擷取記憶體中的位元組。

  • 如果 'content',則輸入預期是字串或位元組類型項目的序列。

encodingstr,預設值=’utf-8’

如果給定要分析的位元組或檔案,則使用此編碼進行解碼。

decode_error{‘strict’, ‘ignore’, ‘replace’}, 預設值=’strict’

關於如果給定要分析的位元組序列包含不屬於給定 encoding 的字元時該怎麼做的指示。預設情況下,它是 ‘strict’,這表示將引發 UnicodeDecodeError。其他值為 ‘ignore’ 和 ‘replace’。

strip_accents{‘ascii’, ‘unicode’} 或可呼叫物件,預設值=None

在預處理步驟期間移除重音並執行其他字元正規化。 ‘ascii’ 是一種快速方法,僅適用於具有直接 ASCII 映射的字元。 ‘unicode’ 是一種稍慢的方法,適用於任何字元。None(預設值)表示不執行任何字元正規化。

‘ascii’ 和 ‘unicode’ 都使用 unicodedata.normalize 中的 NFKD 正規化。

lowercasebool,預設值=True

在符記化之前將所有字元轉換為小寫。

preprocessor可呼叫物件,預設值=None

在保留符記化和 n-gram 生成步驟的同時,覆寫預處理(字串轉換)階段。僅當 analyzer 不可呼叫時才適用。

tokenizer可呼叫物件,預設值=None

在保留預處理和 n-gram 生成步驟的同時,覆寫字串符記化步驟。僅當 analyzer == 'word' 時才適用。

stop_words{‘english’}、list,預設值=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 不可調用時適用。

analyzer{‘word’, ‘char’, ‘char_wb’} 或 callable,預設為 ‘word’

特徵應該由詞還是字元 n-gram 組成。選項 ‘char_wb’ 僅從詞邊界內的文字建立字元 n-gram;詞邊緣的 n-gram 會用空格填充。

如果傳遞一個可調用物件,則該物件用於從原始、未處理的輸入中提取特徵序列。

在 0.21 版中變更:自 v0.21 起,如果 input'filename''file',則資料會先從檔案中讀取,然後傳遞給指定的可調用分析器。

n_featuresint,預設值為 (2 ** 20)

輸出矩陣中的特徵(欄)數量。較小的特徵數量可能會導致雜湊衝突,但較大的數量會在線性學習器中導致較大的係數維度。

binarybool,預設值為 False

如果為 True,則所有非零計數都會設定為 1。這對於模擬二元事件而非整數計數的離散機率模型很有用。

norm{‘l1’, ‘l2’},預設值為 ‘l2’

用於正規化詞向量的範數。如果無正規化則為 None。

alternate_signbool,預設值為 True

如果為 True,則會將交替符號新增至特徵,以便即使對於小的 n_features,也能大致保留雜湊空間中的內積。此方法類似於稀疏隨機投影。

在 0.19 版中新增。

dtypetype,預設值為 np.float64

由 fit_transform() 或 transform() 傳回的矩陣類型。

另請參閱

CountVectorizer

CountVectorizer 將文字文件集合轉換為符記計數的矩陣。

TfidfVectorizer

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()[來源]#

傳回可調用物件來處理輸入資料。

此可調用物件會處理預處理、符號化和 n-gram 生成。

傳回:
analyzer: callable

用於處理預處理、符號化和 n-gram 生成的函式。

build_preprocessor()[來源]#

傳回在符號化之前預處理文字的函式。

傳回:
preprocessor: callable

在符號化之前預處理文字的函式。

build_tokenizer()[來源]#

傳回將字串分割為符號序列的函式。

傳回:
tokenizer: callable

將字串分割為符號序列的函式。

decode(doc)[來源]#

將輸入解碼為 Unicode 符號的字串。

解碼策略取決於向量化器的參數。

參數:
docbytes 或 str

要解碼的字串。

傳回:
doc: str

Unicode 符號的字串。

fit(X, y=None)[來源]#

僅驗證估算器的參數。

此方法允許:(i) 驗證估算器的參數,以及 (ii) 與 scikit-learn 轉換器 API 保持一致。

參數:
X形狀為 [n_samples, n_features] 的 ndarray

訓練資料。

y忽略

不使用,為了 API 的一致性而存在。

傳回:
self物件

HashingVectorizer 執行個體。

fit_transform(X, y=None)[來源]#

將文件序列轉換為文件詞彙矩陣。

參數:
X可疊代原始文字文件,長度 = n_samples

樣本。每個樣本都必須是文字文件(bytes 或 Unicode 字串、檔案名稱或檔案物件,取決於建構函式引數),該文件將會被符號化並雜湊。

y任何

忽略。此參數僅為了與 sklearn.pipeline.Pipeline 相容而存在。

傳回:
X形狀為 (n_samples, n_features) 的稀疏矩陣

文件詞彙矩陣。

get_metadata_routing()[來源]#

取得此物件的中繼資料路由。

請查看使用者指南,瞭解路由機制如何運作。

傳回:
routingMetadataRequest

MetadataRequest 封裝路由資訊。

get_params(deep=True)[來源]#

取得此估算器的參數。

參數:
deepbool,預設值為 True

如果為 True,則會傳回此估算器和包含的子物件(為估算器)的參數。

傳回:
paramsdict

參數名稱對應到它們的值。

get_stop_words()[來源]#

建立或擷取有效的停止詞清單。

傳回:
stop_words: list 或 None

停止詞清單。

partial_fit(X, y=None)[來源]#

僅驗證估算器的參數。

此方法允許:(i) 驗證估算器的參數,以及 (ii) 與 scikit-learn 轉換器 API 保持一致。

參數:
X形狀為 [n_samples, n_features] 的 ndarray

訓練資料。

y忽略

不使用,為了 API 的一致性而存在。

傳回:
self物件

HashingVectorizer 執行個體。

set_output(*, transform=None)[來源]#

設定輸出容器。

請參閱 介紹 set_output API,瞭解如何使用 API 的範例。

參數:
transform{“default”, “pandas”, “polars”},預設值為 None

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定保持不變

在 1.4 版中新增:新增了 "polars" 選項。

傳回:
self估算器執行個體

估算器執行個體。

set_params(**params)[來源]#

設定此估算器的參數。

此方法適用於簡單的估算器,以及巢狀物件(例如 Pipeline)。後者具有 <元件>__<參數> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**params**dict

估算器參數。

傳回:
self估算器執行個體

估算器執行個體。

transform(X)[來源]#

將文件序列轉換為文件詞彙矩陣。

參數:
X可疊代原始文字文件,長度 = n_samples

樣本。每個樣本都必須是文字文件(bytes 或 Unicode 字串、檔案名稱或檔案物件,取決於建構函式引數),該文件將會被符號化並雜湊。

傳回:
X形狀為 (n_samples, n_features) 的稀疏矩陣

文件詞彙矩陣。