互資訊分類#
- 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
- copybool,預設值為 True
是否複製給定的資料。如果設定為 False,則會覆蓋初始資料。
- random_stateint、RandomState 實例或 None,預設值為 None
決定隨機數產生,以便為連續變數新增小雜訊以移除重複的值。傳遞一個 int 以便在多個函數呼叫中獲得可重現的結果。請參閱 詞彙表。
- n_jobsint,預設值為 None
用於計算互資訊的作業數。平行化是在
X
的欄上完成的。None
表示 1,除非在joblib.parallel_backend
內容中。-1
表示使用所有處理器。請參閱 詞彙表 以取得更多詳細資訊。在版本 1.5 中新增。
- 傳回:
- mindarray,形狀為 (n_features,)
每個特徵與目標之間的估計互資訊,以納特單位表示。
備註
「離散特徵」一詞用於代替將它們命名為「分類」,因為它更準確地描述了本質。例如,影像的像素強度是離散特徵(但幾乎不是分類),如果將它們標記為離散特徵,您將獲得更好的結果。另請注意,將連續變數視為離散變數,反之亦然,通常會給出不正確的結果,因此請注意這一點。
真實互資訊不能為負。如果其估計值變為負值,則會將其替換為零。
參考文獻
[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. ])