互資訊分類#

sklearn.feature_selection.mutual_info_classif(X, y, *, discrete_features='auto', n_neighbors=3, copy=True, random_state=None, n_jobs=None)[來源]#

估算離散目標變數的互資訊。

兩個隨機變數之間的互資訊 (MI) [1] 是一個非負值,它衡量變數之間的相依性。當且僅當兩個隨機變數獨立時,它等於零,較高的值表示較高的相依性。

該函數依賴於基於 k 最近鄰距離的熵估計的非參數方法,如 [2][3] 中所述。這兩種方法都基於 [4] 中最初提出的想法。

它可用於單變數特徵選擇,請在 使用者指南 中閱讀更多資訊。

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

特徵矩陣。

y形狀為 (n_samples,) 的類陣列

目標向量。

discrete_features‘auto’、bool 或類陣列,預設值為 ‘auto’

如果為布林值,則決定是否將所有特徵視為離散或連續。如果為陣列,則它應該是形狀為 (n_features,) 的布林遮罩或具有離散特徵索引的陣列。如果為 ‘auto’,則對於密集 X 將其指定為 False,對於稀疏 X 將其指定為 True。

n_neighborsint,預設值為 3

用於連續變數 MI 估計的鄰居數量,請參閱 [2][3]。較高的值會減少估計的變異數,但可能會引入偏差。

copybool,預設值為 True

是否複製給定的資料。如果設定為 False,則會覆蓋初始資料。

random_stateint、RandomState 實例或 None,預設值為 None

決定隨機數產生,以便為連續變數新增小雜訊以移除重複的值。傳遞一個 int 以便在多個函數呼叫中獲得可重現的結果。請參閱 詞彙表

n_jobsint,預設值為 None

用於計算互資訊的作業數。平行化是在 X 的欄上完成的。None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。請參閱 詞彙表 以取得更多詳細資訊。

在版本 1.5 中新增。

傳回:
mindarray,形狀為 (n_features,)

每個特徵與目標之間的估計互資訊,以納特單位表示。

備註

  1. 「離散特徵」一詞用於代替將它們命名為「分類」,因為它更準確地描述了本質。例如,影像的像素強度是離散特徵(但幾乎不是分類),如果將它們標記為離散特徵,您將獲得更好的結果。另請注意,將連續變數視為離散變數,反之亦然,通常會給出不正確的結果,因此請注意這一點。

  2. 真實互資訊不能為負。如果其估計值變為負值,則會將其替換為零。

參考文獻

[2] (1,2)

A. Kraskov、H. Stogbauer 和 P. Grassberger,「估算互資訊」。Phys. Rev. E 69, 2004。

[3] (1,2)

B. C. Ross,「離散與連續資料集之間的互資訊」。PLoS ONE 9(2), 2014。

[4]

L. F. Kozachenko、N. N. Leonenko,「隨機向量的熵的樣本估計:,Probl. Peredachi Inf., 23:2 (1987), 9-16

範例

>>> from sklearn.datasets import make_classification
>>> from sklearn.feature_selection import mutual_info_classif
>>> X, y = make_classification(
...     n_samples=100, n_features=10, n_informative=2, n_clusters_per_class=1,
...     shuffle=False, random_state=42
... )
>>> mutual_info_classif(X, y)
array([0.58..., 0.10..., 0.19..., 0.09... , 0.        ,
       0.     , 0.     , 0.     , 0.      , 0.        ])