В настоящее время я пробую различные методы: 1. Корреляция. 2. Взаимная информация. 3. Дистанционная корреляция, чтобы найти силу связи между переменными в X и зависимой переменной в y. Корреляция самая быстрая и простая (1 час на выборку до 3 миллионов записей и 560 переменных). Расчет взаимной информации занимает примерно 16 часов. Я также рассматриваю корреляцию расстояний из-за ее интересного свойства: корреляция расстояний между Xi и Y равна нулю тогда и только тогда, когда они независимы. Однако я столкнулся с проблемой при выполнении расчетов в Python.
ниже мои данные:
Х
prop_tenure prop_12m prop_6m prop_3m
0.04 0.04 0.06 0.08
0 0 0 0
0 0 0 0
0.06 0.06 0.1 0
0.38 0.38 0.25 0
0.61 0.61 0.66 0.61
0.01 0.01 0.02 0.02
0.1 0.1 0.12 0.16
0.04 0.04 0.04 0.09
0.22 0.22 0.22 0.22
0.72 0.72 0.73 0.72
0.39 0.39 0.45 0.64
**y**
status
0
0
1
1
0
0
0
1
0
0
0
1
Я хочу зафиксировать корреляцию расстояния каждой переменной в X с y и сохранить ее в кадре данных, и, следовательно, я это делаю.
from sklearn.metrics.pairwise import pairwise_distances
num_metrics_df['distance_correlation'] = pairwise_distances(X,y,metric = 'correlation',njobs = -1)
Однако в документации упоминается следующее:
If Y is given (default is None), then the returned matrix is the pairwise distance between the arrays from both X and Y.
Это требует равного количества функций как в X, так и в Y?
Как я могу получить корреляцию расстояния между каждым Xi и y в python? Может кто-нибудь, пожалуйста, помогите мне с этим?
Обновление:
Я попробовал повторить столбцы y в соответствии с X.shape[1], а затем выполнить расчет, но он дает ошибку памяти для выборки из 10 000 записей:
X = data_col.values
lb = preprocessing.LabelBinarizer()
df_target['drform'] = lb.fit_transform(df_target['status'])
y = df_target.values
n_rep = X.shape[1]
y = np.repeat(y,n_rep,axis = 1)
num_metrics_df['distance_correlation'] = pairwise_distances(X,y,metric = 'correlation',njobs = -1)
Traceback (most recent call last):
File "<ipython-input-30-0f28f4b76a7e>", line 20, in <module>
num_metrics_df['distance_correlation'] = pairwise_distances(X,y,metric = 'correlation',njobs = -1)
File "C:\Users\test\AppData\Local\Continuum\anaconda3.1\lib\site-packages\sklearn\metrics\pairwise.py", line 1247, in pairwise_distances
return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
File "C:\Users\test\AppData\Local\Continuum\anaconda3.1\lib\site-packages\sklearn\metrics\pairwise.py", line 1090, in _parallel_pairwise
return func(X, Y, **kwds)
File "C:\Users\test\AppData\Local\Continuum\anaconda3.1\lib\site-packages\scipy\spatial\distance.py", line 2381, in cdist
dm = np.empty((mA, mB), dtype=np.double)
MemoryError