簡體   English   中英

如何在 tensorflow keras 中實現 AUROC 作為損失函數

[英]How to implement AUROC as loss function in tensorflow keras

我正在嘗試使用 tensorflow 和 keras 構建一個網絡,用於分類兩個類(成功或失敗)。 我可以根據我處理 NaN 數據的方式來調整數據的大小,但是為此假設我的完整輸入數據集是 (502, 68)。 大多數特征是連續的,有些是二元的。

困難在於數據不平衡(96% 成功)。

隨着數據的不平衡,過度擬合很快就會到來,而將損失最小化的結果就是“只預測一切都是成功的”。 我玩過班級重量,但沒有非常令人信服的結果。

我的問題是損失函數。 這就是為什么我想使用 AUROC 作為損失。 我發現的唯一一篇關於它的 SO 帖子是 6 年前的這篇文章,最初讓我駁回了這個想法。 添加 AUC 作為 keras 的損失函數“好吧,AUROC 不可微,讓我們放棄這個想法”。

從那以后,我發現了一些更新的算法,最著名的是 Pytorch 中的 roc-star。 我想將其用作自定義損失函數。 但是,keras 將一個接受 y_true 和 y_pred 並返回一個值的函數作為自定義損失。 roc-star 算法將上一次迭代的梯度和值作為輸入。 你知道解決這個問題的方法嗎?

我正在使用用 keras.models.Sequential 創建的簡單網絡。

所以我的問題有好幾個層次,請隨意回答其中任何一個,而忽略其他的=p

  1. 有誰知道使用 AUROC 作為損失函數的其他簡單方法?
  2. 我是不是太執着於 AUROC 了? 我想我可以基於可以工作的混淆矩陣來制作一個更簡單、更容易區分的函數。
  3. 如何將 roc-star 算法實現到自定義損失函數?

編輯:我意識到我沒有提供 roc-star 算法的鏈接: https ://github.com/iridiumblue/roc-star

我正在嘗試在我的張量流模型 atm 中使用它。 會的,差強人意。 我使用的數據集復雜且難以預測,而 EDA 和其他模型(即 pca 和決策樹)得出的預測結果相似 %s。 盡管如此,這就是我為實現它所做的工作。 被告知 tf keras 和 kerasregressor 是不同的並且有不同的文檔。 但是它們的工作方式相似,並且基本上可以做同樣的事情。

def auroc(yTrainSet, yValidationSet): return tf.py_function(roc_auc_score, (yTrainSet, yValidationSet), tf.double)

import itertools
import tensorflow as tf
import pandas as pd
from tensorflow import keras
from tensorflow.keras import models
from tensorflow.keras import datasets
from tensorflow.keras import layers
from sklearn.metrics import roc_auc_score
# 1- Instantiate Model
ourModel = keras.Sequential()
# 2- Specify Shape of First Layer
ourModel.add(layers.Dense(512, activation = 'relu', input_shape = ourInputShape))
# 3- Add the layers
ourModel.add(layers.Dense(3, activation= 'softmax')) #softmax returns array of probability scores (num prior), and in this case we have to predict either CSCANCEL, MEMBERCANCEL, ACTIVE)

ourModel.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy', auroc]) #auroc used here

一旦這個模型是這樣制作的,你只需按照正常的方式編譯/運行它,等等。我發現這個實現的整體性能差別很小,但我還是想分享一下。 祝你好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM