2011-12-21 151 views
4

我有一個功能集的Python:創建n次多項式

[x1,x2....xm] 

現在我想創建多項式功能設置 這也就意味着,如果度爲二,然後我有功能設置

[x1.... xm,x1^2,x2^2...xm^2, x1x2, x1x3....x1,xm......xm-1x1....xm-1xm] 

所以它包含的只有2階而言.. 同樣是爲了是否爲三..然後你將有三次項以及..

怎麼辦 這個?

編輯1:我的工作機器學習項目中,我有接近7個功能...並在此線性特徵非線性迴歸是給好的結果......因此,我認爲,要獲得更多的數量在功能,我可以將這些功能映射到一個更高的層面.. 所以一個辦法是考慮特徵向量的多項式階... 也產生X1 * X1容易.. :)但得到的組合的剩餘部分是有點棘手..

組合能給我X1X2X3導致如果訂單是3?

回答

4

使用

itertools.combinations(list, r) 

list其中是所述特徵集,和r是所希望的多項式特徵的順序。然後乘以上述給出的子列表的元素。那應該會給你{x1*x2, x1*x3, ...}。你需要構建其他的,然後聯合所有部分。

[編輯] 更好:itertools.combinations_with_replacement(list, r)將很好地給排序的長度r元組允許重複的元素。

+1

'itertools.combinations(firstOrderFeatures,3)'應該爲您提供三個一階特徵的所有獨特組合。它將具有「{x1,x2,x3}」,但不包含其他5種排列。 – DataComputist 2011-12-21 22:04:58

+1

不應該是itertools.combinations_with_replacement? 2階的特徵是x1^2,x1x2,x2^2,而不是像組合會給你的x1x2。 – 2011-12-21 23:12:41

+0

你說得對。 'itertools.combinations_with_replacement(list,r)'很好地給出了允許重複元素的排序的長度爲r的元組。 – DataComputist 2011-12-21 23:31:25

3

你可以使用itertools.product創建從原始集合中選擇n個值的所有可能的集合;但請記住,這將生成(x2, x1)以及(x1, x2)

同樣,itertools.combinations將產生集沒有重複或重新排序,但這意味着你不會得到(x1, x1)例如。

你究竟想要做什麼?你需要什麼結果值?你確定你確實需要那些x1^2類型術語(這意味着多次使用同一個特徵)?無論如何,這個背景中的「特徵」究竟是什麼?

0

使用卡爾的回答爲靈感,嘗試使用產品,然後以一組對象的優勢。類似的,

set([set(comb) for comb in itertools.product(range(5),range(5)]) 

這將擺脫重複對。然後,您可以將該設置返回到列表中,然後按照您的要求對其進行分類或迭代。

編輯: 這實際上會殺死x_m^2條款,因此建立排序的元組而不是集合。這將允許條款是可散列的和不重複的。

set([tuple(sorted(comb)) for comb in itertools.product(range(5),range(5))]) 
+0

你不能把套成套。你必須使用frozensets,以便它們可以散列 – 2011-12-21 22:26:41