2016-08-24 21 views
1

我有一個數據框可以從下面的字典中重新構建。k-means/x-means(或其他?)聚類在熊貓/ python中

數據框代表全球各城市的23 statistics (X1-X23)。每個城市在數據框中佔據一行,23個統計數據作爲單獨的列。

我的實際df有~6 million個城市,所以它是一個很大的數據框。

我想要做的是:

第1步:確定基礎上,23 statistics (X1-X23)城市羣。

步驟#2:鑑於步驟所識別的簇#1,我想要構造城市的組合,使得:

一個)從任何給定的簇選擇的城市的數量是有限(限制可以是爲每個羣集不同)

b)避免某些簇共

c)對投資組合選擇應用附加標準,以使投資組合中城市之間惡劣天氣的相關性最小化,城市間良好天氣的相關性最大化。

我的問題集是這樣的,K for a K-means algo會很大,但我不確定那個值是多少。

我一直在讀聚類以下幾點:

Cluster analysis in R: determine the optimal number of clusters

How do I determine k when using k-means clustering?

X-means: Extending K-means...

然而,許多文獻是國外給我,會帶我幾個月理解。我不是數據科學家,也沒有時間學習機器學習課程。

在這一點上我有數據框,我現在正在旋轉我的拇指。

如果你能幫助我在實際實施Steps#1 to Steps#2熊貓中使用示例數據集,我將不勝感激。

的字典下面可以通過pd.DataFrame(x)進行重建,以一個數據幀,其中x是字典以下:

輸出df.head的()to_dict( 'REC'):

[{'X1': 123.40000000000001, 
    'X2': -67.900000000000006, 
    'X3': 172.0, 
    'X4': -2507.1999999999998, 
    'X5': 80.0, 
    'X6': 1692.0999999999999, 
    'X7': 13.5, 
    'X8': 136.30000000000001, 
    'X9': -187.09999999999999, 
    'X10': 50.0, 
    'X11': -822.0, 
    'X12': 13.0, 
    'X13': 260.80000000000001, 
    'X14': 14084.0, 
    'X15': -944.89999999999998, 
    'X16': 224.59999999999999, 
    'X17': -23.100000000000001, 
    'X18': -16.199999999999999, 
    'X19': 1825.9000000000001, 
    'X20': 710.70000000000005, 
    'X21': -16.199999999999999, 
    'X22': 1825.9000000000001, 
    'X23': 66.0, 
    'city': 'SFO'}, 
{'X1': -359.69999999999999, 
    'X2': -84.299999999999997, 
    'X3': 86.0, 
    'X4': -1894.4000000000001, 
    'X5': 166.0, 
    'X6': 882.39999999999998, 
    'X7': -19.0, 
    'X8': -133.30000000000001, 
    'X9': -84.799999999999997, 
    'X10': 27.0, 
    'X11': -587.29999999999995, 
    'X12': 36.0, 
    'X13': 332.89999999999998, 
    'X14': 825.20000000000005, 
    'X15': -3182.5, 
    'X16': -210.80000000000001, 
    'X17': 87.400000000000006, 
    'X18': -443.69999999999999, 
    'X19': -3182.5, 
    'X20': 51.899999999999999, 
    'X21': -443.69999999999999, 
    'X22': -722.89999999999998, 
    'X23': -3182.5, 
    'city': 'YYZ'}, 
{'X1': -24.800000000000001, 
    'X2': -34.299999999999997, 
    'X3': 166.0, 
    'X4': -2352.6999999999998, 
    'X5': 87.0, 
    'X6': 1941.3, 
    'X7': 56.600000000000001, 
    'X8': 120.2, 
    'X9': -65.400000000000006, 
    'X10': 44.0, 
    'X11': -610.89999999999998, 
    'X12': 19.0, 
    'X13': 414.80000000000001, 
    'X14': 4891.1999999999998, 
    'X15': -2396.0999999999999, 
    'X16': 181.59999999999999, 
    'X17': 177.0, 
    'X18': -92.900000000000006, 
    'X19': -2396.0999999999999, 
    'X20': 805.60000000000002, 
    'X21': -92.900000000000006, 
    'X22': -379.69999999999999, 
    'X23': -2396.0999999999999, 
    'city': 'DFW'}, 
{'X1': -21.300000000000001, 
    'X2': -47.399999999999999, 
    'X3': 166.0, 
    'X4': -2405.5999999999999, 
    'X5': 85.0, 
    'X6': 1836.8, 
    'X7': 55.700000000000003, 
    'X8': 130.80000000000001, 
    'X9': -131.09999999999999, 
    'X10': 47.0, 
    'X11': -690.60000000000002, 
    'X12': 16.0, 
    'X13': 297.30000000000001, 
    'X14': 5163.3999999999996, 
    'X15': -2446.4000000000001, 
    'X16': 182.30000000000001, 
    'X17': 83.599999999999994, 
    'X18': -36.0, 
    'X19': -2446.4000000000001, 
    'X20': 771.29999999999995, 
    'X21': -36.0, 
    'X22': -378.30000000000001, 
    'X23': -2446.4000000000001, 
    'city': 'PDX'}, 
{'X1': -22.399999999999999, 
    'X2': -9.0, 
    'X3': 167.0, 
    'X4': -2405.5999999999999, 
    'X5': 86.0, 
    'X6': 2297.9000000000001, 
    'X7': 41.0, 
    'X8': 109.7, 
    'X9': 64.900000000000006, 
    'X10': 42.0, 
    'X11': -558.29999999999995, 
    'X12': 21.0, 
    'X13': 753.10000000000002, 
    'X14': 5979.6999999999998, 
    'X15': -2370.1999999999998, 
    'X16': 187.40000000000001, 
    'X17': 373.10000000000002, 
    'X18': -224.30000000000001, 
    'X19': -2370.1999999999998, 
    'X20': 759.5, 
    'X21': -224.30000000000001, 
    'X22': -384.39999999999998, 
    'X23': -2370.1999999999998, 
    'city': 'EWR'}] 
+1

您應該在[CrossValidated](http://stats.stackexchange.com)上發佈此問題,因爲這不是一個真正的關於編程的問題,而是關於如何在一般情況下進行羣集。當然,事先做一個搜索---我很確定這已經被問過。 –

+0

有趣的是,在CrossValidated上搜索會產生一些最終引用StackOverflow的帖子--- [這個答案](http://stackoverflow.com/questions/1793532/how-do-i-determine-k-when-using -k-means-clustering)。 –

+2

你也可以在[Data Science SE](http://datascience.stackexchange.com/)上提問。雖然有一些方法可以確定* k *的最佳數量,但它們都有自己的標準,這些標準可能不符合您的需求。在實踐中,人們通常嘗試不同的k值並自己判斷結果。 – ayhan

回答

2

我不知道你的意思是「進一步處理」,但這是一個超級簡單的解釋,讓你開始。

1)使用頂部(列標題)中的變量(x1-x23)將數據轉換爲數據框(pandas),每行代表不同的城市(以便您的df.head()顯示x1-x23爲列標題)。

2)規範變量

3)決定是否使用K均值

4之前使用PCA)使用kmeans- scikit learn makes this part easy檢查這也and this

5)試試這個silhouette analysis選購數量的簇獲得開始

很好的參考文獻:
Hastie and Tibshirani book

Hastie and Tibshirani free course, but use R

機器學習

編輯在Udacity,Coursera,EDX課程:忘了提,當你正在測試出來的過程中不使用你的整個數據集。使用一小部分數據(例如100K城市),這樣處理時間要少得多,直到你把所有事情都做好。

+0

我的意思是「進一步處理」是基於已確定的集羣,我想要制定一個選擇算法,對任何集羣中可以選擇的城市數量進行限制。 – codingknob

+0

@codingknob遵循我上面概述的來獲得初始聚類。然後問具體問題。 – ivan7707