2017-07-24 66 views
0

基本上,我有一個Python字典,字符串鍵和int數組作爲值。如何在Python中對字典的值進行聚類?

dict = {"Option1Results" : [4, 1, 5, 2, 4], 
     "Option2Results" : [11, 44, 2, 1, 5], 
     .... 
     } 

我想基於這些值的交集在這個字典上實現分層聚類。例如,假設Option1Results和Option4Results共享大約70%的相同整數,然後將它們聚集在一起。除了遍歷字典並逐個比較值之外,還有什麼方法可以解決這個問題嗎?

+2

你是什麼意思「聚集在一起」?這就是爲什麼強烈建議你在SO上展示你最好的嘗試,不管它效率低下或蹩腳。你的代碼經常使解釋變得更容易。 –

+0

字典不是此問題選擇的正確選項。 –

+0

鑑於'A'是'[1,2,3,4]'和'B'是'[2,3,4,5]'而'C'是'[4,5,6,7]'。根據你的標準'A'和'B'會聚簇,'B'和'C'會聚簇,但'A'和'C'不會聚簇。你將如何處理? [層次聚類標記](https://stackoverflow.com/tags/hierarchical-clustering/info)提到了許多聚類技術。你選了一個嗎?你研究過你的聚類技術的算法嗎? –

回答

0

我想你可以利用兩個函數餘弦相似性和k均值

餘弦相似性:

餘弦相似性是相似的兩個非零 內積空間的措施的向量之間的度量它們之間角度的餘弦。
https://en.wikipedia.org/wiki/Cosine_similarity

data = {'Option{}Results'.format(i):[ random.randint(1,100) for _ in range(5)] for i in range(100)} 
pairwise.cosine_similarity(data.values()[0],data.values()[1]) 
array([[ 0.85988428]]) 

k均值:

k均值聚類是矢量量化的方法,最初來自 信號處理,即流行用於數據挖掘 聚類分析。 k均值聚類旨在將n個觀測值劃分爲k個觀測值,其中每個觀測值屬於具有最近平均值的羣集,用作羣集的原型。這導致將數據空間劃分爲Voronoi單元。 https://en.wikipedia.org/wiki/K-means_clustering

from sklearn.cluster import KMeans 
kmeans = KMeans(n_clusters=5, random_state=0).fit(data.values()) 
kmeans.predict(data['Option70Results']) 
array([2]) 
0

爲了找到給定字典作爲一組的值的交叉點:

intersection = set.intersection(*map(set, dict.values()) 

分級聚類可使用SciPy的的聯動和fcluster來實現。這個answer解釋了使用scipy的分層聚類。

相關問題