Я попытался выполнить искусственную нейронную сеть (ann) с R, и мои данные имеют некоторые категориальные / факторные переменные. Насколько я знаю, мне нужно создать несколько фиктивных переменных для решения этой проблемы, и, вероятно, мне нужно будет ввести переменные в модель.
Я попытался использовать метод model.matrix
и создал модель ann. Однако я не смог вычислить его с тестовыми данными, которые имеют точно такой же формат, что и данные обучения, за исключением столбца продаж.
Я знаю, что проблема возникает после того, как я создал фиктивные переменные. Модель не может найти то же имя столбца и не может вычислить. Как я могу использовать свои тестовые данные и вычислить год?
Вот моя строка данных;
'data.frame': 142 obs. of 19 variables:
$ category: Factor w/ 3 levels "WJP","WPI","WSLS": 3 3 3 3 3 3 3 3 3 3 ...
$ mm : Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
$ profile : Factor w/ 4 levels "K","L","M","X": 1 1 1 1 1 1 1 1 1 1 ...
$ nv : int 0 0 0 0 0 0 0 0 0 1 ...
$ vp : int 0 0 0 0 0 0 0 1 1 0 ...
$ color : Factor w/ 17 levels "B","BEG","BL",..: 17 1 9 3 14 15 3 17 3 17 ...
$ cli : Factor w/ 2 levels "OTHER","SEASON": 2 2 2 2 2 2 2 2 2 2 ...
$ stylec : int 3 3 3 3 6 3 6 3 3 3 ...
$ rtn : int 17 2 2 2 2 2 4 7 2 2 ...
$ dev : num 2.51 2.25 2.25 2.25 2.25 ...
$ stosale : num 10.75 2.25 2.25 2.25 2.25 ...
$ dm1 : num 19507.8 19.6 14.6 19.6 36.9 ...
$ dm2 : num 3092.74 5 4.2 5 7.74 ...
$ dm3 : num 1691.04 3.75 3.31 3.75 5.25 ...
$ grossp : num 2710.98 2.25 2.25 2.25 2.25 ...
$ grossDM : num 2.48 2.25 2.25 2.25 2.25 ...
$ firstsp : num 39.67 2.25 2.25 2.25 2.25 ...
$ qty : num 106213 7661 6671 23500 18722 ...
$ sales : num 272.25 2.25 2.25 2.25 2.25 ...
Вот код:
library(neuralnet)
df<- read.csv("de2.csv",sep=";")
df_matrix <- model.matrix(~ category+ mm + profile + nv + vp + color + cli + stylec + rtn + dev + stosale + dm1 + dm2 + dm3 + grossp + grossDM + firstsp + qty + sales, data=df)
colnames(df_matrix)
col_list <- paste(c(colnames(df_matrix[,-c(1,39)])),collapse="+")
col_list <- paste(c("sales~",col_list),collapse="")
f <- formula(col_list)
set.seed(7896129)
nn1=neuralnet(f, data=df_matrix, hidden=3, act.fct = "logistic", linear.output = FALSE)
dft<- read.csv("deft.csv",sep=";")
result=compute(nn1, dft)
result$net.result
====================== =====
Я нашел решение для своей проблемы, но все же хотел бы получить ответ на мой вопрос. В качестве решения я разделил свои данные на данные поезда и теста, а затем запустил neura lnet с данными поезда, следуя кодам. Поэтому вместо чтения тестовых данных из другого CSV-файла в необработанном виде я использовал те же данные. Но все же я хотел бы запустить мою модель для необработанных данных, если это возможно, как в первую очередь.
index <- sample(1:nrow(df_matrix),round(0.75*nrow(df_matrix)))
train <- df_matrix[index,]
test <- df_matrix[-index,]
nn1=neuralnet(f, data=train, hidden=3, act.fct = "logistic", linear.output =FALSE)
result=compute(nn1, test[,1:38])