Ваши предположения несколько неверны.
Возьмем для примера:
import pandas as pd
data = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [1, 2, 3, 4, 5], 'Class' : [0, 1, 1, 0, 1]})
cor = data.corr(method='pearson')
print(cor)
cor_target = abs(cor['Class'])
print(cor_target)
result = cor_target[cor_target > 0.5]
print(result)
a b Class
a 1.000000 1.000000 0.288675
b 1.000000 1.000000 0.288675
Class 0.288675 0.288675 1.000000
a 0.288675
b 0.288675
Class 1.000000
Name: Class, dtype: float64
Class 1.0
Name: Class, dtype: float64
Набор функций a
и b
абсолютно одинаковы, у них корреляция 1.0 , но вы все равно получите только 1
.
Удалите метки классов и наблюдайте только корреляцию между промежуточными функциями.
Обратите внимание на матрицу корреляции и выберите те, которые имеют низкую корреляцию .
import pandas as pd
data = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [1, 2, 3, 4, 5], 'Class' : [0, 1, 1, 0, 1]})
cor = data[['a', 'b']].corr(method='pearson')
print(cor)
cor_target = abs(cor)
a b
a 1.0 1.0
b 1.0 1.0
Если вы хотите использовать метки, попробуйте важность функции scikit-learn, https://scikit-learn.org/stable/modules/feature_selection.html