Почему я получаю небольшую оценку корреляции и взаимной информации? - PullRequest
0 голосов
/ 07 апреля 2020

Я генерирую случайные выборки для задачи двоичной классификации:

X, y = make_classification(n_features=40, n_redundant=4, n_informative=36,n_clusters_per_class=2, n_samples=50000)

Я хочу проверить корреляцию между объектами и целью (для шага feature selection).

I Я использую 2 различных метода:

1. correlation (pearson)
2. mutual information

Я получаю небольшую оценку за оба метода между функциями и целью.

Взаимная информация:

    from sklearn.feature_selection import mutual_info_classif
    res1 = mutual_info_classif(X, y)

Соотношение:

df = pd.DataFrame(data=X)
df['Taregt'] = y
res2 = df.apply(lambda x: x.corr(df['Taregt']))

Для обоих методов я получаю результаты, которые меньше 0,4

Почему я получаю небольшой балл? Я ожидаю получить более высокий балл? Чего мне не хватает?

1 Ответ

1 голос
/ 08 апреля 2020

Это искусственно сгенерированный набор случайных классификационных данных, созданный функцией удобства make_classification scikit-learn. Нет абсолютно никаких оснований ожидать, что будет какой-либо конкретный диапазон значений для коэффициентов корреляции между объектами и меткой. Фактически, простой эксперимент показывает, что действительно существует диапазон значений корреляции, достигающий ~ 0,65 (положительный или отрицательный) и столь же низкий, как и около нуля, как и ожидалось в таких случайных данных; сохраняя n_features=10 для краткости ::

from sklearn.datasets import make_classification
from sklearn.feature_selection import mutual_info_classif
import pandas as pd

for i in range(10):
  X, y = make_classification(n_features=10, n_redundant=4, n_informative=6,n_clusters_per_class=2, n_samples=50000)
  df = pd.DataFrame(data=X)
  df['Target'] = y
  res2 = df.apply(lambda x: x.corr(df['Target']))
  print(res2)

Результат:

0        -0.299619
1         0.019879
2        -0.271226
3         0.324632
4        -0.299824
5         0.277574
6         0.028462
7         0.395118
8         0.297397
9         0.001334
Target    1.000000
dtype: float64
0        -0.008546
1        -0.131875
2         0.009582
3         0.314725
4         0.292152
5         0.002754
6         0.203895
7         0.009530
8        -0.314609
9         0.310828
Target    1.000000
dtype: float64
0         0.061911
1         0.648200
2        -0.293845
3         0.002402
4         0.592591
5        -0.387568
6         0.277449
7         0.574272
8        -0.448803
9        -0.000266
Target    1.000000
dtype: float64
0         0.289361
1         0.306837
2        -0.565776
3         0.018211
4        -0.001650
5        -0.008317
6        -0.318271
7         0.025830
8        -0.001511
9         0.461342
Target    1.000000
dtype: float64
0         0.316292
1         0.223331
2        -0.001817
3         0.423708
4        -0.466166
5        -0.283735
6        -0.212039
7         0.311600
8        -0.292352
9         0.302497
Target    1.000000
dtype: float64
0         0.006351
1        -0.004631
2        -0.331184
3         0.083991
4         0.002227
5        -0.000883
6        -0.123998
7         0.374792
8        -0.087007
9         0.530111
Target    1.000000
dtype: float64
0        -0.278837
1         0.360339
2        -0.407622
3        -0.026460
4        -0.275985
5        -0.007404
6         0.295955
7        -0.290008
8         0.293710
9         0.138187
Target    1.000000
dtype: float64
0         0.005973
1        -0.182802
2        -0.001029
3        -0.000993
4         0.207585
5         0.002144
6         0.298949
7        -0.288891
8        -0.277202
9        -0.203653
Target    1.000000
dtype: float64
0         0.298933
1         0.000461
2        -0.004837
3         0.290285
4        -0.013016
5        -0.003280
6        -0.131817
7         0.048733
8        -0.032910
9         0.002162
Target    1.000000
dtype: float64
0         0.494809
1         0.382098
2         0.549377
3         0.004632
4         0.300572
5        -0.486202
6        -0.581924
7         0.300024
8         0.308240
9        -0.398422
Target    1.000000
dtype: float64

Глядя только на значения корреляции, мы даже не можем быть уверены, какие характеристики являются информативными (здесь 6 ) и которые являются избыточными (здесь 4).

Вкратце: здесь нечего объяснять, кроме того, что ваше определение " меньше 0,4 " не является точным.

Аналогичные аргументы справедливы и для взаимной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...