ΠΠ°ΠΌ Π΄Π°Π½Π° ΠΌΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ² (ΡΠ°Π±Π»ΠΈΡΠ°) Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ β ΠΏΡΠΈΠ·Π½Π°ΠΊ.
ΠΡΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ highly_correlated_features(data, threshold)
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ threshold
(ΠΎΡ 0 Π΄ΠΎ 1, Π½Π΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ).
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΡ ΠΠΈΡΡΠΎΠ½Π°. ΠΠΎΠ²ΡΠΎΡΡ ΠΏΠ°Ρ ΠΈ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΡΠ΅ Π΄ΡΠ±Π»ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ((1, 2)
ΠΈ (2, 1)
β ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅).
Π¦Π΅Π»Ρ:
ΠΡΡΠ²ΠΈΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»ΡΠ½ΠΎ "ΠΏΠΎΠ²ΡΠΎΡΡΡΡ" Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΌΡΠ»ΡΡΠΈΠΊΠΎΠ»Π»ΠΈΠ½Π΅Π°ΡΠ½ΠΎΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΡΡ .
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
import numpy as np
from itertools import combinations
def pearson_corr(x, y):
x = np.array(x)
y = np.array(y)
return np.corrcoef(x, y)[0, 1]
def highly_correlated_features(data, threshold=0.9):
arr = np.array(data)
n_features = arr.shape[1]
result = []
for i, j in combinations(range(n_features), 2):
corr = pearson_corr(arr[:, i], arr[:, j])
if abs(corr) > threshold:
result.append((i, j))
return result
# ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
X = [
[1, 2, 10],
[2, 4, 20],
[3, 6, 30],
[4, 8, 40],
[5, 10, 50]
]
print(highly_correlated_features(X, threshold=0.95))
# ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ: [(0, 1), (0, 2), (1, 2)]