要使用SVM或神經網絡,它需要將分類變量轉換(編碼)為數字變量,這種情況下的常規方法是使用0-1二進制值,將第k個分類值轉換為(0,0 ,...,1,0,... 0)(1在第k個位置上)。還有其他方法可以做到這一點,尤其是當存在大量分類值(例如10000),使得0-1表示將在神經網絡中引入大量其他維度(輸入單位)時,這似乎不是很理想,或者預期?
我在問一般策略。
要使用SVM或神經網絡,它需要將分類變量轉換(編碼)為數字變量,這種情況下的常規方法是使用0-1二進制值,將第k個分類值轉換為(0,0 ,...,1,0,... 0)(1在第k個位置上)。還有其他方法可以做到這一點,尤其是當存在大量分類值(例如10000),使得0-1表示將在神經網絡中引入大量其他維度(輸入單位)時,這似乎不是很理想,或者預期?
我在問一般策略。
在NLP中,單詞通常被編碼為k中的1-of,最近出現了單詞嵌入的使用。 維基百科頁面及其參考文獻是一個好的開始。
總體思路是為每個單詞$學習一個矢量表示$ x_i \ in \ mathbb {R} ^ n $ i $,在該空間中語義相似的單詞接近。因此,輸入的大小為$ n $,而不是詞彙表的大小。
也許您可以將該想法轉移到您的設置中。
您可以從 caret
包中在R中使用 dummyVars
。它將根據級別數自動創建不同的列。之後,您可以使用 cbind
並將其附加到原始數據。其他選項包括 model.matrix
和 sparse.model.matrix
。
您可以嘗試更緊湊的二進制編碼,有時甚至勝過一鍵式。例如,您可以在Keras中實現分類嵌入。
您可以使用實體編碼,這是一種更為複雜的網絡結構。它在分類輸入和第一個完全連接層之間添加了1到 $ k-1 $ span>隱藏的線性神經元。這背後有一些很好的經驗結果。
“分類變量的實體嵌入”,程果,費利克斯·伯克哈恩
我們將函數逼近問題中的分類變量映射到歐幾里得空間中,這是分類變量的實體嵌入。在標準的監督訓練過程中,神經網絡學習了映射。與單點編碼相比,實體嵌入不僅減少了內存使用並加快了神經網絡的速度,更重要的是,通過在嵌入空間中映射彼此接近的相似值,它揭示了分類變量的內在屬性。我們在最近的Kaggle競賽中成功應用了該軟件,並以相對簡單的功能將其排名第三。我們在本文中進一步證明,當數據稀疏且統計信息未知時,實體嵌入可幫助神經網絡更好地泛化。因此,它對於具有許多高基數特徵的數據集特別有用,而其他方法往往會過度擬合。我們還證明,從訓練有素的神經網絡獲得的嵌入在用作輸入功能時,可大大提高所有經過測試的機器學習方法的性能。實體嵌入為分類變量定義距離度量時,可用於可視化分類數據和數據聚類。