Понимание вывода функции nnet

Я новичок в нейронной сети, так что, извините за мой наивный вопрос. Я хотел бы понять вывод функции nnet. Я использую эту функцию для выполнения мультиклассовой классификации.

В частности, у меня есть набор данных с 216 предметами, 6 переменными и одним столбцом, который представляет класс (три класса).

   SRT_LTS_1 SRT_LTS_2 SRT_LTS_3 SRT_LTS_4 SRT_LTS_5 SRT_LTS_6 SRT_Recall_D_tot Classe
DATSANI01  1.386294  1.609438  2.079442  2.302585  2.397895  2.397895         2.564949      2
DATSANI02  1.945910  2.079442  2.079442  2.197225  2.302585  2.302585         2.079442      2
DATSANI03  2.079442  2.302585  2.302585  2.397895  2.397895  2.397895         2.397895      2
DATSANI04  1.609438  2.079442  2.397895  2.397895  2.397895  2.397895         2.397895      2
DATSANI05  2.197225  2.484907  2.484907  2.564949  2.564949  2.564949         2.484907      2
DATSANI06  2.079442  2.397895  2.484907  2.564949  2.564949  2.564949         2.564949      2

После разделения набора данных в обучающем наборе и тестового теста я изменил кадр данных, используя class.ind функция, чтобы столкнуться с проблемой мультиклассовой классификации, как бинарная комбинация:

nnet_trainData_SRT2$Y = class.ind(nnet_trainData_SRT2$Classe)

nnet_trainData_SRT2$Classe=NULL

Итак, мой фрейм данных выглядит так:

SRT_LTS_1 SRT_LTS_2 SRT_LTS_3 SRT_LTS_4 SRT_LTS_5 SRT_LTS_6 SRT_Recall_D_tot Y.0 Y.1 Y.2
DATNPS_209  1.791759  2.079442  2.397895  2.564949  2.564949  2.564949         2.564949   0   1   0
DATNPS_108  2.197225  2.564949  2.564949  2.564949  2.564949  2.564949         2.564949   0   1   0
DATNPS_234  2.197225  2.397895  2.484907  2.564949  2.564949  2.564949         2.564949   0   1   0
DATNPS_191  1.609438  1.791759  2.079442  2.197225  2.302585  2.302585         1.945910   0   1   0
DATNPS_126  2.397895  2.484907  2.484907  2.564949  2.564949  2.564949         2.564949   0   1   0
DATSANI22   1.386294  1.945910  2.302585  2.484907  2.564949  2.564949         2.564949   0   0   1

Где 1 и 0 означают, соответственно, что subjcet находится или нет в одном из трех классов.

Затем я использую функцию nnet:

model_nnSRT2<-nnet(Y~ SRT_LTS_1 +SRT_LTS_2+ SRT_LTS_3 +SRT_LTS_4+ SRT_LTS_5 +SRT_LTS_6, nnet_trainData_SRT2, size=2, decay=0.1,softmax=TRUE,entropy=TRUE).

Но я не понимаю вывод этой функции, когда получаю model_nnSRT2$fitted.values:

                 0           1            2
    DATNPS_209 0.01699072 0.827037151 0.1559721302
    DATNPS_108 0.01789546 0.771608777 0.2104957604
    DATNPS_234 0.01645185 0.794800012 0.1887481349
    DATNPS_191 0.05037927 0.839477193 0.1101435346
    DATNPS_126 0.01603337 0.788266382 0.1957002460
    DATSANI22  0.01740139 0.836014235 0.1465843749
    DATNPS_34  0.02802254 0.791518861 0.1804586001
    DATNPS_117 0.05310552 0.835370232 0.1115242473
    DATNPS_22  0.01726448 0.799919291 0.1828162304
    DATNPS_189 0.01861498 0.775974194 0.2054108222
    DATNPS_228 0.98459076 0.014816869 0.0005923730
    DATNPS_255 0.01770538 0.788957760 0.1933368566

а также model_nnSRT2$residuals,

                      0            1             2
DATNPS_209 -0.016990718  0.172962849 -0.1559721302
DATNPS_108 -0.017895462  0.228391223 -0.2104957604
DATNPS_234 -0.016451854  0.205199988 -0.1887481349
DATNPS_191 -0.050379272  0.160522807 -0.1101435346
DATNPS_126 -0.016033372  0.211733618 -0.1957002460
DATSANI22  -0.017401390 -0.836014235  0.8534156251
DATNPS_34  -0.028022539  0.208481139 -0.1804586001
DATNPS_117 -0.053105521  0.164629768 -0.1115242473
DATNPS_22  -0.017264479  0.200080709 -0.1828162304
DATNPS_189 -0.018614984  0.224025806 -0.2054108222
DATNPS_228  0.015409242 -0.014816869 -0.0005923730
DATNPS_255 -0.017705384  0.211042240 -0.1933368566

Что означают эти цифры продолжения? Почему у меня нет вывода в классе с 0 или 1 из model_nnSRT2$fitted.values? И как эта функция рассчитывает остатки?

1 ответ

У меня вообще нет опыта работы с R в целом, но результат выглядит вполне правдоподобным с точки зрения нейронной сети.

Класс в нейронной сети на самом деле является нейроном, который в зависимости от функции активации обеспечивает вероятности. В вашем случае их три (0-2). Таким образом, кажется, что ваша сеть выдает какую-то вероятность для каждого нейрона (или класса). Вы можете увидеть это, суммируя результаты. Они равны одному на образец. Это показывает, насколько хорошо сеть работает на конкретном образце. Например, если ваша выборка принадлежит определенному классу, связанный нейрон должен иметь выход, максимально приближенный к одному, а остальные к нулю.

Остатки - это просто разница между прогнозируемым значением и целевым значением. Вы можете проверить это, изучив значения. Таким образом, это означает, что остаток должен быть как можно меньше. Вы видите из своих данных... остаток для неправильно классифицированной выборки действительно высок.

Другие вопросы по тегам