看板 DataScience 關於我們 聯絡資訊
問題類別:數據預處理 使用工具: python pytorch scikit-learn 問題內容: 各位大大好,最近在研究對於資料處理的部分, 在面對無序特徵(nominal feature時), 我們通常習慣使用one-hot encoding的技巧來處理我們的數據。 將一個特徵(例如顏色)拆成n個特徵(紅,橙,黃...), 再藉由二元的0跟1來表示。 那想請教的是,如果做處理類似的特徵時, 可以將one-hot encoding所產生的稀疏矩陣合併使用嗎? 或是換句話說,可以對一個屬於多類別的list進行one-hot encoding 以下舉個簡單的例子 先以常見的顏色問題舉例,假設我們在描述衣服的顏色特徵, 我們會將以下特徵: 顏色 紅 黃 藍 轉換成 顏色紅 顏色黃 顏色藍 [1 0 0] [0 1 0] [0 0 1] 那我想請教的是,如果今天衣服有多個顏色呢? 例如: 顏色 紅藍相間 紅黃相間 黃藍相間 我的腦海中主要出現三種方法 想請教大大們是否可行或是有哪些優缺? 方法1: 區分成顏色1 顏色2 這樣使用one-hot encoding就會變成 顏色1紅 顏色1黃 顏色1藍 顏色2紅 顏色2黃 顏色2藍 [1 0 0 0 0 1] . . . 思考:這種方法應該是可行,只是如果遇到顏色很多時, 可能會產生參數過大的問題,且產生的矩陣會太稀疏。 方法2: 既然都是在描寫顏色特徵,能否直接在同一個one-hot encoding的矩陣中描述。 顏色紅 顏色黃 顏色藍 [1 0 1] . . . 思考:這樣可以避免掉方法1可能產生的問題, 只是不知道能不能將one-hot encoding這樣子使用? 我目前的想法是覺得應該可行,因為1跟0是代表是與否而已(? 想請問這樣的數據處理是否會產生問題? 方法3: 基本上混合了方法1與方法2, 在同一個one-hot encoding中表示, 但是是形成一個多維的矩陣來表示 顏色紅 顏色黃 顏色藍 [1 0 0 0 0 1] 思考:如上所示,用一個二維矩陣來表示衣服的全部顏色, 一列表示了一個顏色,這是我在網路上看到有人嘗試過的方法, 但比較疑惑的是,如果衣服的顏色很多,會使列數增加, 是否又會導致問題一的問題,加上其他的特徵如果都是一維的(例如衣服的價錢,尺碼) 這樣是否會導致輸入參數的維度不一致? 以上是我目前能想到的三個方法 不知道各位大大有什麼想法 目前傾向於使用方法2 因為我想要研究的題目 資料數量會很龐大 怕使用方法1與3會使得資料過於龐大 不知道方法2是否可行呢? 或是各位大大有沒有什麼其他的處理方法呢? 在此先感謝資料科學版的各位大大 祝大家新年快樂 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.106.40 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1549459747.A.BB5.html ※ 編輯: karco (118.233.179.85), 02/06/2019 23:16:28
p122607: 我個人覺得第二個方法好,就把各自當作獨立特徵,不過那 02/07 10:06
p122607: 就要預先列出在你的研究中所有可能會出現顏色類別。如果 02/07 10:06
p122607: 你的資料顏色很重要,那是不是會使用到很多漸層色來標記 02/07 10:06
p122607: ,那原始的資料也要夠多才行 02/07 10:06
yiefaung: 通常就法二 multilabel 02/07 16:47
感謝兩位大大回覆 關於p大的留言 目前想實作的應用是原子的id 想藉由one-hot encoding來表示原子間的鄰居關係 所以應該可以避免掉類似漸層色的問題 當然還是一邊搜集更多原始資料中 另外針對y大的回覆,所以特徵也適用multilabel的方法囉? 一開始以為只能應用在label的處理上 感謝解答 ※ 編輯: karco (118.233.179.85), 02/07/2019 23:45:04
celestialgod: 想成什麼顏色有出現的話,法二就很直覺 02/14 15:26
celestialgod: 法三看認成不同件衣服 02/14 15:27