我使用以下代码来获取相关矩阵。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(20,4))
df = df.corr()
说 df 如下
0 1 2 3
0 1.000000 -0.156813 0.294344 -0.034569
1 -0.156813 1.000000 -0.238828 0.222677
2 0.294344 -0.238828 1.000000 0.071389
3 -0.034569 0.222677 0.071389 1.000000
上述相关矩阵的相关性低于0.23的最大子集是[0,1,3]和[1,2,3],因为[0,1,3]和[1,2,3]内的所有相关性] 低于 0.23,其他子集如 [0,3]、[1,2] 仅包含两个元素。
如果 df 是 200 * 200 矩阵,找到此类子集的最快方法是什么?检查所有 2^200 种可能性会太慢。
最佳答案
看起来您想要创建一个图表并找到它的派系。
您可以通过networkx
来实现这一点的find_clique
转换后from_pandas_adjacency
:
import networkx as nx
G = nx.from_pandas_adjacency(df.lt(0.23))
cliques = list(nx.find_cliques(G))
输出:
[[1, 3, 0], [1, 3, 2]]
你的图表:
关于python - 如何找到相关矩阵的相关性低于给定值的最大子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77257474/