Automati c решает, какую функцию удалить из матрицы корреляции в python - PullRequest
1 голос
/ 16 января 2020

Я хочу автоматизировать свой код, потому что я хочу go для нескольких файлов. Каждый раз, когда я хочу создать матрицу корреляции, определить порог, и если корреляция между 2 столбцами выше, чем порог - выбрать один из них и удалить его из кадра данных. Я хочу продолжить этот процесс, пока у меня не будет никакой корреляции, превышающей пороговое значение.

У кого-нибудь есть идеи, как подойти к этому вопросу? Спасибо!

1 Ответ

0 голосов
/ 16 января 2020

Удаление переменной не меняет корреляцию между другими переменными. Таким образом, вы можете итеративно удалить переменную с наибольшим числом корреляций выше порогового значения. Возможно, вы захотите посмотреть на уменьшение размерности или важность функций для удаления избыточных переменных.

import numpy as np

np.random.seed(42)
# 100 variables, 100 samples, to make some features
# highly correlated by random chance
x = np.random.random((100, 100))
corr = abs(np.corrcoef(x))
# Set diagonal to zero to make comparison with threshold simpler
np.fill_diagonal(corr, 0)
threshold = 0.3
# Mask to keep track of what is removed
keep_idx = np.ones(x.shape[0], dtype=bool)
for i in range(x.shape[0]):
    # Create the mask from the kept indices
    mask = np.ix_(keep_idx, keep_idx)
    # Get the number of correlations above a threshold.
    counts = np.sum(corr[mask] > threshold, axis=0)
    print(counts.shape)
    if max(counts) == 0:
        break
    # Get the worst offender and work out what the
    # original index was
    idx = np.where(keep_idx)[0][np.argmax(counts)]
    # Update mask
    keep_idx[idx] = False
...