Я пытался и искал много часов, чтобы найти решение для моей проблемы без успеха. Я надеюсь, что смогу описать свою проблему как можно более четко:
Общая ситуация:
Моя цель - найти наилучшие комбинации функций из разных фреймов данных для машинного обучения. Поэтому я хочу рассчитать корреляцию каждой функции в одной версии с моим «target_column», а также с их комбинациями (например, df1 + df2 против target_column, df2 + df3 + df4 против target_column, ...).
Ограничительные проблемы:
- Фреймы данных очень велики -> 5 000 000 наблюдений на фрейм данных
- Мой компьютер имеет 16 ГБ памяти (у меня много ошибки памяти во время моей работы)
Описание моей основной проблемы:
У меня есть список Dataframes: list_of_dfs = [df1, df2, df3, df4, df5]
Каждый DataFrame представлен в pandas .get_dummies представлении (потому что много категорических признаков).
Я могу pd.concat их, потому что они уже представляют информацию для тех же самых наблюдений.
Я хочу иметь все комбинации list_of_dfs для следующая цель:
- pd.concat их в новый DataFrame
- Рассчитать корреляцию этого DataFrame с моим target_column (не включается в dfs из list_of_dfs)
* 1 033 * Мой текущий подход:
def get_df_name(df):
name =[x for x in globals() if globals()[x] is df][0]
return name
def corr(df1, df2):
n = len(df1)
v1, v2 = df1.values, df2.values
sums = np.multiply.outer(v2.sum(0), v1.sum(0))
stds = np.multiply.outer(v2.std(0), v1.std(0))
print(get_df_name(df1))
return pd.DataFrame((v2.T.dot(v1) - sums / n) / stds / n, df2.columns, df1.columns)
from itertools import combinations
for i in range(6):
list_of_dummies_comb = combinations(list_of_dfs, i)
# test = pd.concat(list_of_dummies_comb, axis=1)
# print(corr(test, target_column).median())
В последних двух строках кода у меня возникла проблема, связанная с обработкой class.tuple, и я получил ошибку, что не могу их объединить.
У кого-нибудь есть идея или решение для моей проблемы или мой подход?
Спасибо большое! :)