互信息回歸#

sklearn.feature_selection.mutual_info_regression(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 and P. Grassberger, “Estimating mutual information”. Phys. Rev. E 69, 2004.

[3] (1,2)

B. C. Ross “Mutual Information between Discrete and Continuous Data Sets”. PLoS ONE 9(2), 2014.

[4]

L. F. Kozachenko, N. N. Leonenko, “Sample Estimate of the Entropy of a Random Vector”, Probl. Peredachi Inf., 23:2 (1987), 9-16

範例

>>> from sklearn.datasets import make_regression
>>> from sklearn.feature_selection import mutual_info_regression
>>> X, y = make_regression(
...     n_samples=50, n_features=3, n_informative=1, noise=1e-4, random_state=42
... )
>>> mutual_info_regression(X, y)
array([0.1..., 2.6...  , 0.0...])