Neural-Networks
如何建立神經網絡來輸出序數數據?
我有一個神經網絡來預測輸出變量是序數的東西。我將在下面使用三個可能的輸出 A < B < C 來描述。
如何使用神經網絡輸出分類數據非常明顯:輸出只是最後(通常是全連接)層的 softmax,每個類別一個,預測的類別是具有最大輸出值的類別(這是許多流行模型中的默認值)。我一直在對序數值使用相同的設置。但是,在這種情況下,輸出通常沒有意義,例如 A 和 C 的網絡輸出高但 B 低:這對於序數值來說是不合理的。
我對此有一個想法,即通過將輸出與 A 的 1 0 0、B 的 1 1 0 和 C 的 1 1 1 進行比較來計算損失。稍後可以使用另一個分類器(例如貝葉斯)調整確切的閾值) 但這似乎抓住了輸入排序的基本思想,而沒有規定任何特定的區間尺度。
解決這個問題的標準方法是什麼?是否有任何研究或參考資料描述了不同方法的優缺點?
我相信大多數人所做的只是將序數分類視為通用的多類分類。所以,如果他們有 $ K $ 課程,他們將有 $ K $ 輸出,並簡單地使用交叉熵作為損失。
但是有些人已經設法為您的序數類發明了一種巧妙的編碼(參見這個stackoverflow 答案)。這是一種單熱編碼,
- 第 1 類表示為 [0 0 0 0 …]
- 第 2 類表示為 [1 0 0 0 …]
- 第 3 類表示為 [1 1 0 0 …]
即每個神經元都在預測概率 $ P(\hat y < k) $ . 你仍然必須使用 sigmoid 作為激活函數,但我認為這有助於網絡理解類之間的一些連續性,我不知道。之後,您進行後處理 (
np.sum
) 以將二進制輸出轉換為您的類。這種策略類似於Frank 和 Hall的合奏,我認為這是此類策略的第一次發布。