2017-02-03 63 views
-2

我試圖通過結合我的功能來改進我的機器學習系統。我寫了一些代碼來生成我的所有功能組合。但是,這似乎效率很低。有沒有辦法做得更快?如何製作所有功能組合?

allcomb=[] 
for i in range(pow(2,len(features))): 
    com=[] 
    for j in (range(len(features))): 
     if((i&(1<<j))==1): 
      com.append(features[j]) 
    allcomb.append(com) 
+0

downvote的原因是什麼? –

+0

我沒有投票你的問題,但檢查[StackOverflow的如何問一個很好的問題](http://stackoverflow.com/help/how-to-ask)的一些見解。 – dantiston

+0

請給我一些見解,比如我的問題如何不好?我在這裏沒有看到任何問題,我正在傾訴並提出真正的問題。你能告訴我這個@dantiston有什麼問題謝謝 –

回答

1

首先,檢查Python的itertools包;這將有助於提高代碼的效率和可讀性。你可以用這個包來完成你想要的大部分組合事物。

一個很大的好處是,你得到一個生成器的組合序列,所以你不必一次把它們全部存儲在一個列表中。

另外,請注意,你有一個固有的緩慢的過程。如果你想要16個特徵的所有可能的組合,那就是通過任何處理循環2 ** 16次。你已經在64K迭代,而且每增加一個功能就會增加一倍。

在進入任何重處理之前,您是否可以考慮進行PCA(主成分分析)和特徵降低?

+0

經過PCA和功能選擇後,我獲得了20個功能,因此如何優化以檢查組合?它甚至可能小於O(n * 2^n)? –

+0

從目前爲止你所描述的很少,沒有 - 你被這2^n卡住了。你擔心** O **複雜性還是實際執行時間?如果是時候了,那麼是否有任何事情可以通過簡單的運行來緩存部分結果,或者使用一個測試的結果來完全避免另一個? – Prune