TfidfTransformer#

class sklearn.feature_extraction.text.TfidfTransformer(*, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)[原始碼]#

將計數矩陣轉換為標準化的 tf 或 tf-idf 表示。

Tf 代表詞頻 (term-frequency),而 tf-idf 代表詞頻乘以逆向文件頻率 (inverse document-frequency)。這是一種常見的資訊檢索詞權重方案,在文件分類中也發現有很好的應用。

在給定文件中使用 tf-idf 而不是原始詞語出現頻率的目標,是縮減在給定語料庫中非常頻繁出現的詞語的影響,這些詞語在經驗上比在訓練語料庫中小部分出現的特徵資訊量更少。

用於計算文件集中文件 d 的詞語 t 的 tf-idf 公式為 tf-idf(t, d) = tf(t, d) * idf(t),並且 idf 的計算方式為 idf(t) = log [ n / df(t) ] + 1 (如果 smooth_idf=False),其中 n 是文件集中文件的總數,而 df(t) 是 t 的文件頻率;文件頻率是指文件集中包含詞語 t 的文件數。在上述方程式中將 “1” 加入 idf 的效果是,idf 為零的詞語,即在訓練集中所有文件中出現的詞語,不會被完全忽略。(請注意,上面的 idf 公式與標準教科書符號不同,標準教科書將 idf 定義為 idf(t) = log [ n / (df(t) + 1) ])。

如果 smooth_idf=True (預設),則將常數 “1” 加到 idf 的分子和分母中,如同看到一個額外文件,其中每個詞語在集合中恰好出現一次,這樣可以防止除以零的情況:idf(t) = log [ (1 + n) / (1 + df(t)) ] + 1。

此外,用於計算 tf 和 idf 的公式取決於參數設定,這些參數設定對應於 IR 中使用的 SMART 符號,如下所示:

預設情況下,Tf 為 “n” (自然),當 sublinear_tf=True 時為 “l” (對數)。當使用 use_idf 時,Idf 為 “t”,否則為 “n” (無)。當 norm='l2' 時,標準化為 “c” (餘弦),當 norm=None 時,標準化為 “n” (無)。

使用者指南中閱讀更多內容。

參數:
norm{‘l1’, ‘l2’} 或 None,預設為 ‘l2’

每個輸出列都將具有單位範數,即

  • ‘l2’:向量元素的平方和為 1。當應用 l2 範數時,兩個向量之間的餘弦相似度是它們的點積。

  • ‘l1’:向量元素的絕對值之和為 1。請參閱normalize

  • None:不進行標準化。

use_idf布林值,預設為 True

啟用逆向文件頻率重新加權。如果為 False,則 idf(t) = 1。

smooth_idf布林值,預設為 True

透過將 1 加到文件頻率來平滑 idf 權重,如同看到一個額外文件,其中每個詞語在集合中恰好出現一次。防止除以零的情況。

sublinear_tf布林值,預設為 False

應用次線性 tf 縮放,即將 tf 替換為 1 + log(tf)。

屬性:
idf_形狀為 (n_features) 的陣列

逆向文件頻率 (IDF) 向量;僅當 use_idf 為 True 時才定義。

在版本 0.20 中新增。

n_features_in_整數

fit期間看到的特徵數量。

在版本 1.0 中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時才定義。

在版本 1.0 中新增。

另請參閱

CountVectorizer

CountVectorizer

TfidfVectorizer

將文字轉換為 n-gram 計數的稀疏矩陣。

HashingVectorizer

TfidfVectorizer

將原始文件集合轉換為 TF-IDF 特徵矩陣。

CountVectorizer

將文字文件集合轉換為詞語出現次數矩陣。

參考文獻

[Yates2011]

範例

>>> from sklearn.feature_extraction.text import TfidfTransformer
>>> from sklearn.feature_extraction.text import CountVectorizer
>>> from sklearn.pipeline import Pipeline
>>> corpus = ['this is the first document',
...           'this document is the second document',
...           'and this is the third one',
...           'is this the first document']
>>> vocabulary = ['this', 'document', 'first', 'is', 'second', 'the',
...               'and', 'one']
>>> pipe = Pipeline([('count', CountVectorizer(vocabulary=vocabulary)),
...                  ('tfid', TfidfTransformer())]).fit(corpus)
>>> pipe['count'].transform(corpus).toarray()
array([[1, 1, 1, 1, 0, 1, 0, 0],
       [1, 2, 0, 1, 1, 1, 0, 0],
       [1, 0, 0, 1, 0, 1, 1, 1],
       [1, 1, 1, 1, 0, 1, 0, 0]])
>>> pipe['tfid'].idf_
array([1.        , 1.22314355, 1.51082562, 1.        , 1.91629073,
       1.        , 1.91629073, 1.91629073])
>>> pipe.transform(corpus).shape
(4, 8)
R. Baeza-Yates 和 B. Ribeiro-Neto (2011)。現代資訊檢索。Addison Wesley,第 68-74 頁。

[MRS2008]

參數:
C.D. Manning、P. Raghavan 和 H. Schütze (2008)。資訊檢索導論。劍橋大學出版社,第 118-120 頁。

fit(X, y=None)[原始碼]#

學習 idf 向量 (全域詞語權重)。

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

詞語/符號計數的矩陣。
yNone

計算 tf-idf 不需要此參數。

返回:

self物件

擬合的轉換器。

參數:
fit_transform(X, y=None, **fit_params)[原始碼]#

擬合數據,然後轉換它。

使用選用參數 fit_params 將轉換器擬合到 Xy,並返回 X 的轉換版本。

X形狀為 (n_samples, n_features) 的類陣列

輸入樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設為 None

詞語/符號計數的矩陣。
目標值 (無監督轉換為 None)。

**fit_params字典

其他擬合參數。

X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列

參數:
input_features字串或 None 的類陣列,預設值為 None

輸入特徵。

  • 如果 input_featuresNone,則會使用 feature_names_in_ 作為輸入特徵名稱。如果未定義 feature_names_in_,則會產生以下輸入特徵名稱:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 為類陣列,則如果已定義 feature_names_in_,則 input_features 必須與 feature_names_in_ 相符。

詞語/符號計數的矩陣。
feature_names_out字串物件的 ndarray

與輸入特徵相同。

get_metadata_routing()[來源]#

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

請查閱 使用者指南,了解路由機制的運作方式。

詞語/符號計數的矩陣。
routingMetadataRequest

一個 MetadataRequest,封裝了路由資訊。

get_params(deep=True)[來源]#

取得此估算器的參數。

參數:
deepbool,預設值為 True

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

詞語/符號計數的矩陣。
paramsdict

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

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)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

詞語/符號計數的矩陣。
self估算器實例

估算器實例。

set_transform_request(*, copy: bool | None | str = '$UNCHANGED$') TfidfTransformer[來源]#

要求傳遞給 transform 方法的中繼資料。

請注意,此方法僅在 enable_metadata_routing=True 時才相關(請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制的運作方式。

每個參數的選項為

  • True:要求中繼資料,並在提供時傳遞給 transform。如果未提供中繼資料,則會忽略要求。

  • False:不要求中繼資料,且 meta-estimator 不會將其傳遞給 transform

  • None:不要求中繼資料,且如果使用者提供,則 meta-estimator 將會引發錯誤。

  • str:應該以這個給定的別名傳遞中繼資料給 meta-estimator,而不是原始名稱。

預設值(sklearn.utils.metadata_routing.UNCHANGED)保留現有的要求。這允許您變更某些參數的要求,而不是其他參數。

在 1.3 版中新增。

注意事項

僅當此估算器用作 meta-estimator 的子估算器時,此方法才相關,例如在 Pipeline 內部使用。否則,它沒有任何作用。

參數:
copy字串、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

針對 transform 中的 copy 參數的中繼資料路由。

詞語/符號計數的矩陣。
yNone

更新後的物件。

transform(X, copy=True)[來源]#

將計數矩陣轉換為 tf 或 tf-idf 表示法。

參數:
X形狀為 (n_samples, n_features) 的稀疏矩陣

fit(X, y=None)[原始碼]#

copybool,預設值為 True

是否複製 X 並對副本進行操作,還是執行就地操作。copy=False 僅在 CSR 稀疏矩陣中有效。

詞語/符號計數的矩陣。
vectors形狀為 (n_samples, n_features) 的稀疏矩陣

Tf-idf 加權文件詞語矩陣。