Что говорит корреляция Пирсона, когда признаки не коррелированы - PullRequest
0 голосов
/ 09 мая 2020

У меня есть набор данных (31 функция, включая класс). Этот набор данных будет использоваться для решения задачи классификации. Я подумал проверить корреляцию между функциями, используя корреляцию Пирсона, существующую в pandas. Когда я устанавливаю threshold > 0.5 Пирсона, я получаю следующее:

import pandas as pd

data = pd.read_csv("../dataset.csv")
cor = data.corr(method='pearson')
cor_target = abs(cor['Class'])
result = cor_target[cor_target > 0.5]
print(result)

Результат:

Class    1.0
Name: Class, dtype: float64

Получается, что все функции 30 не коррелированы вообще . Что это значит? Всегда ли это хороший показатель, что функции независимы?

Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Ваши предположения несколько неверны.

Возьмем для примера:

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

...