Поскольку веса основаны на частоте, наличие различного количества обучающих проверочных выборок может привести к смещению результатов проверки. Они должны быть одинакового размера.

ользуюkeras пакет в R для обучения модели глубокого обучения. Мой набор данных сильно несбалансирован. Поэтому я хочу установитьclass_weight аргумент вfit функция. Вот функция fit и ее аргументы, которые я использовал для своей модели

history <- model %>% fit(
  trainData, trainClass, 
  epochs = 5, batch_size = 1000, 
  class_weight = ????,
  validation_split = 0.2
)

В питоне я могу установитьclass_weight следующим образом:

class_weight={0:1, 1:30}

Но я не уверен, как это сделать в R. В меню помощи R это описываетclass_weight следующим образом:

Необязательные именованные индексы отображения списка (целые числа) к весу (с плавающей запятой) для применения к потере модели для выборок из этого класса во время обучения. Это может быть полезно для того, чтобы сказать модели «уделять больше внимания» выборкам из недопредставленного класса.

Любая идея или предложения?

 missuse24 окт. 2017 г., 13:09
У меня нет опыта работы с керасом, но первое, что я хотел бы попробовать, этоlist("0" = 1, "1" = 30)

Ответы на вопрос(2)

Решение Вопроса

Class_weight должен быть списком, поэтому

    history <- model %>% fit(
        trainData, trainClass, 
        epochs = 5, batch_size = 1000, 
        class_weight = list("0"=1,"1"=30),
        validation_split = 0.2
    )

похоже на работу. Keras внутренне использует функцию as_class_weights, чтобы изменить список на python-словарь (см.https://rdrr.io/cran/keras/src/R/model.R).

     class_weight <- dict(list('0'=1,'1'=10))
     class_weight
     >>> {0: 1.0, 1: 10.0}

Выглядит так же, как словарь Python, который вы упомянули выше.

I нашел общее решение в решении Python, поэтому я преобразовал в R:

counter=funModeling::freq(Y_data_aux_tr, plot=F) %>% select(var, frequency)
majority=max(counter$frequency)
counter$weight=ceil(majority/counter$frequency)


l_weights=setNames(as.list(counter$weight), counter$var)

Используй это:

 fit(..., class_weight = l_weights)

Совет, если вы используетеfit_generatorПоскольку веса основаны на частоте, наличие различного количества обучающих проверочных выборок может привести к смещению результатов проверки. Они должны быть одинакового размера.

Ваш ответ на вопрос