我有一個數據集的名義和數字特徵。如果可能,我希望能夠完全用數字表示這個數據集。數字表示名義數據,同時保留數據語義
理想情況下,我可以做到這一點n-ary名義功能。我意識到在二進制情況下,可以用整數表示兩個名義值。但是,當一個名義特徵可以有許多排列時,如果可能的話,這將如何實現?
我有一個數據集的名義和數字特徵。如果可能,我希望能夠完全用數字表示這個數據集。數字表示名義數據,同時保留數據語義
理想情況下,我可以做到這一點n-ary名義功能。我意識到在二進制情況下,可以用整數表示兩個名義值。但是,當一個名義特徵可以有許多排列時,如果可能的話,這將如何實現?
有許多技術將分類屬性「嵌入」爲數字。
例如,給定,可以採取的值red
,blue
和,我們就可以平凡編碼此作爲屬性isRed={0,1}
,isGreen={0,1}
和isBlue={0,1}
分類變量。雖然這很受歡迎,並且很明顯會「起作用」,但許多人認爲後來的數值處理技術會產生明智的結果。
如果您運行例如以這種方式編碼的數據集上的k-均值,結果可能不會太有意義。特別是,如果你得到一個如isRed=.3 isGreen=.2 isBlue=.5
的意思 - 你不能合理地將其映射回原始數據。更糟糕的是,有些算法甚至可能得到isRed=0 isGreen=0 isBlue=0
。
我建議您嘗試使用您的實際的數據,並儘可能避免編碼。如果你有一個好的工具,它可以讓你使用混合的數據類型。 不要嘗試使一切成爲數字向量。這種數據的數學視圖是相當有限的,數據不會給你所有需要從這個視圖中受益的數學假設(例如度量空間)。
不要這樣做:我試圖編碼某些名義屬性爲整數。
除名稱特徵只有兩種排列組合。可以爲每個使用不同的整數(例如1和3)。
但是,如果有兩個以上的置換,整數不能使用。假設我們將1,2和3分配給三個排列組合。正如我們所看到的,由於不同,1-2和2-3之間的關係比1-3更高。
而是對每個名義屬性的每個值使用單獨的二進制特徵。因此,你的問題的答案是:這是不可能的/明智的。
如果您使用熊貓,您可以在名義值列上使用名爲.get_dummies()
的函數。這會將N
唯一值的列轉換爲N
(或者如果您想要N-1
,稱爲drop_first
)新列指示1
或0
是否存在值。
實施例:
s = pd.Series(list('abca'))
get_dummies(s)
a b c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0