Мутация несовместимых массивов - PullRequest
1 голос
/ 06 октября 2019
library(boot)
install.packages("AMORE")
library(AMORE)

l.data=nrow(melanoma)
set.seed(5)
idxTrain<-sample(1:l.data,100)
idxTest<-setdiff(1:l.data,idxTrain)

set.seed(3)

net<-newff(n.neurons=c(6,6,3),
        learning.rate.global=0.02,
        momentum.global=0.5,
        hidden.layer="sigmoid",
        output.layer="purelin",
        method="ADAPTgdwm",
        error.criterium="LMS")

result<-train(net,
         melanoma[idxTrain,-2],
         melanoma$status,
         error.criterium="LMS",
         report=TRUE,
         show.step=10,
         n.shows=800)

Проблема, с которой я столкнулся, заключается в том, что в результате возникла ошибка: «target - non-conforma arrays». Я знаю, что это проблема с melanoma $ status , но не знаю, как соответствующим образом изменить данные. Есть идеи? Пара образцов данных (если вы не используете загрузочный пакет от Rstudio). меланома:

        time status sex  age year thickness ulcer
    1     10      3   1   76 1972      6.76     1
    2     30      3   1   56 1968      0.65     0
    3     35      2   1   41 1977      1.34     0
    4     99      3   0   71 1968      2.90     0
    5    185      1   1   52 1965     12.08     1

1 Ответ

1 голос
/ 06 октября 2019

Ваша целевая переменная должна сначала принимать только обучающие индексы. Более того, цель должна иметь количество столбцов, равное количеству классов - с горячим кодированием. Как то так:

net<-newff(n.neurons=c(6,6,3),
       learning.rate.global=0.02,
       momentum.global=0.5,
       hidden.layer="sigmoid",
       output.layer="purelin",
       method="ADAPTgdwm",
       error.criterium="LMS")

Target = matrix(data=0, nrow=length(idxTrain), ncol=3)
status_mat=matrix(nrow=length(idxTrain), ncol=2)
status_mat[,1] = c(1:length(idxTrain))
status_mat[,2] = melanoma$status[idxTrain]

Target[(status_mat[,2]-1)*length(idxTrain)+status_mat[,1]]=1

result<-train(net,
          melanoma[idxTrain,-2],
          Target,
          error.criterium="LMS",
          report=TRUE,
          show.step=10,
          n.shows=800)
...