Python 连接列表中的所有数据帧组合,以计算与另一个数据帧的相关性
我花了好几个小时试图找到解决我问题的办法,但没有成功。 我希望我能尽可能清楚地描述我的问题: 一般情况: 我的目标是从不同的数据帧中找到用于机器学习的最佳特征组合。 因此,我想计算单个版本中每个特性与我的“目标列”的相关性,以及组合(例如df1+df2与目标列、df2+df3+df4与目标列……) 限制性问题:Python 连接列表中的所有数据帧组合,以计算与另一个数据帧的相关性,python,pandas,machine-learning,data-science,itertools,Python,Pandas,Machine Learning,Data Science,Itertools,我花了好几个小时试图找到解决我问题的办法,但没有成功。 我希望我能尽可能清楚地描述我的问题: 一般情况: 我的目标是从不同的数据帧中找到用于机器学习的最佳特征组合。 因此,我想计算单个版本中每个特性与我的“目标列”的相关性,以及组合(例如df1+df2与目标列、df2+df3+df4与目标列……) 限制性问题: 数据帧非常大-->每个数据帧5'000'000个观测值 我的电脑有16 GB的内存(我在工作中有很多内存错误) 我的主要问题描述: 我有一个数据帧列表:list\u of_dfs=[df
list\u of_dfs=[df1,df2,df3,df4,df5]
每个数据帧都用pandas.get_dummies表示(因为有许多分类功能)。
我可以对它们进行pd.concat,因为它们已经代表了相同观测的信息 为了实现以下目标,我希望有所有的\u-of-dfs列表的组合:
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,我得到了一个错误,我无法处理它们
有人对我的问题或方法有想法或解决方案吗
非常感谢!:) 欢迎来到SO!您愿意将计算转移到云服务吗?在您的机器上,很长的一段路是将每个数据帧(df1.col1+df2.col1,df1.col1+df2.col2…)的列组合起来,并在运行时将相关性存储在矩阵中。或者,您可以在AWS上启动一个大型EC2实例,只需计算所有DFs并计算一个相关矩阵。@谢谢您的回答:)我不想在这一步中使用AWS或netcup实例,因为当我执行功能选择步骤时,我可以将压缩稀疏矩阵用于不需要太多计算能力或内存的回归/分类模型:)您有其他解决方案吗?我可以如何处理这种情况:)如果你必须生活在内存限制中,你可以做我上面提到的事情:获取所有列的完整组合的相关性,一次两列,并将它们存储在一个矩阵中。每次计算应该不难,但取决于列数,可能需要一段时间(将结果写入磁盘以保存进度)。或者,你可以研究一些事情,比如你是否可以一次计算所有的DF,然后只得到corr(DF)结果。我得到了一个有用的答案,解决了我的问题: