我有一個創建了大熊貓的相關性矩陣(基於多種金融工具的時間序列)查找集羣和集羣的最核心要素,即是:Python的 - 從相關矩陣
(見以下數據)
我想通過相關元素對結果進行聚類。我已經成功地做到這一點通過使用閾值法:
# Create a list of correlated pairs
l=list(matrix[(matrix>0.75)|(matrix<-0.75)].stack().index)
li=[item for item in l if item[0]!=item[1]]
# Create a list of groups with correlated instruments
import networkx as nx
gr = nx.Graph(li)
groups=list(nx.connected_components(gr))
這將返回相關文書的清單:
[{'AIGCI', 'BZ', 'CL', 'HO', 'QM'},
{'AUD', 'M6A'},
{'CHF', 'E7', 'EUR', 'M6E'},
{'EMD', 'ES', 'NQ', 'RTY', 'YM'},
{'GBP', 'M6B'},
{'GC', 'MGC', 'SI'},
{'GF', 'LE'},
{'KE', 'ZW'},
{'NIY', 'NKD'},
{'TN', 'UB', 'ZB', 'ZF', 'ZN', 'ZT'},
{'ZM', 'ZS'}]
1)現在我想找出哪一個是最「中心「這個組織的每一個工具,即與其組中大多數人相關並且最相關的工具。
2)鑽研networkx和scikit學習文檔,我開始覺得可能是創建羣集不輸入閾值,我覺得這太武斷了像DBscan 或affinity propagation的一些更復雜的方式,或網絡中的另一種算法x
問題1)是我正在嘗試解決的問題,但我認爲這將需要更好地理解可用於時間序列分析相關特定任務的不同聚類算法 - 因此存在問題2)。
如果有人有解決方案1),這將是非常棒的。 或者,指向什麼算法最適合聚類相關矩陣元素並對結果執行分析(如查找最中心元素)的指針會很好。
數據:
dict_={'AIGCI': {'AIGCI': 1.0,
'AUD': 0.3233391012080904,
'BZ': 0.77450612217810844,
'CAD': 0.37758495673263409,
'CHF': 0.1148713675671198,
'CL': 0.75790671332995785,
'E7': 0.15824972293693412,
'EMD': 0.20907406346059357,
'ES': 0.19658499045886685,
'EUR': 0.15900870599662253},
'AUD': {'AIGCI': 0.3233391012080904,
'AUD': 1.0,
'BZ': 0.16539566069043321,
'CAD': 0.56525172934861501,
'CHF': 0.39333882276815396,
'CL': 0.16369950005905545,
'E7': 0.41552240077868813,
'EMD': 0.20167148908243152,
'ES': 0.24541480412857969,
'EUR': 0.41986142158397494},
'BZ': {'AIGCI': 0.77450612217810844,
'AUD': 0.16539566069043321,
'BZ': 1.0,
'CAD': 0.41187046918391457,
'CHF': -0.0092838918317396726,
'CL': 0.97045709275661984,
'E7': 0.0095197228846883777,
'EMD': 0.20634087929447745,
'ES': 0.1923482593409139,
'EUR': 0.012112114472331318},
'CAD': {'AIGCI': 0.37758495673263409,
'AUD': 0.56525172934861501,
'BZ': 0.41187046918391457,
'CAD': 1.0,
'CHF': 0.35191789369432458,
'CL': 0.40972181454072104,
'E7': 0.31846852856331664,
'EMD': 0.28026489729302623,
'ES': 0.29256826563873206,
'EUR': 0.32757564057495203},
'CHF': {'AIGCI': 0.1148713675671198,
'AUD': 0.39333882276815396,
'BZ': -0.0092838918317396726,
'CAD': 0.35191789369432458,
'CHF': 1.0,
'CL': 0.012688599148050395,
'E7': 0.8239125068633365,
'EMD': -0.13725408324352331,
'ES': -0.1041381030850365,
'EUR': 0.82474780532058567},
'CL': {'AIGCI': 0.75790671332995785,
'AUD': 0.16369950005905545,
'BZ': 0.97045709275661984,
'CAD': 0.40972181454072104,
'CHF': 0.012688599148050395,
'CL': 1.0,
'E7': 0.0073086434159336097,
'EMD': 0.22554220312864581,
'ES': 0.20407792352963819,
'EUR': 0.011629405332006879},
'E7': {'AIGCI': 0.15824972293693412,
'AUD': 0.41552240077868813,
'BZ': 0.0095197228846883777,
'CAD': 0.31846852856331664,
'CHF': 0.8239125068633365,
'CL': 0.0073086434159336097,
'E7': 1.0,
'EMD': -0.14561549010272393,
'ES': -0.10852020039517689,
'EUR': 0.99165451800731141},
'EMD': {'AIGCI': 0.20907406346059357,
'AUD': 0.20167148908243152,
'BZ': 0.20634087929447745,
'CAD': 0.28026489729302623,
'CHF': -0.13725408324352331,
'CL': 0.22554220312864581,
'E7': -0.14561549010272393,
'EMD': 1.0,
'ES': 0.85791959540783203,
'EUR': -0.13599101777284797},
'ES': {'AIGCI': 0.19658499045886685,
'AUD': 0.24541480412857969,
'BZ': 0.1923482593409139,
'CAD': 0.29256826563873206,
'CHF': -0.1041381030850365,
'CL': 0.20407792352963819,
'E7': -0.10852020039517689,
'EMD': 0.85791959540783203,
'ES': 1.0,
'EUR': -0.10635681098349807},
'EUR': {'AIGCI': 0.15900870599662253,
'AUD': 0.41986142158397494,
'BZ': 0.012112114472331318,
'CAD': 0.32757564057495203,
'CHF': 0.82474780532058567,
'CL': 0.011629405332006879,
'E7': 0.99165451800731141,
'EMD': -0.13599101777284797,
'ES': -0.10635681098349807,
'EUR': 1.0}}
import pandas as pd
matrix=pd.DataFrame(dict_)