我如何使用NeuralNet模型的分类/因子输入与R

我如何使用NeuralNet模型的分类/因子输入与R,r,R,我试着用R来执行人工神经网络(ann),我的数据有一些分类/因子变量。据我所知,我需要创建一些虚拟变量来处理这个问题,我可能需要将这些变量引入到模型中 我尝试使用model.matrix方法创建了ann模型。但是,我不能用测试数据计算它,测试数据的格式与培训数据的格式完全相同,只有sales列除外 我知道问题发生在我创建虚拟变量之后。模型找不到相同的列名,无法计算。如何使用测试数据并计算ann 这是我的数据 'data.frame': 142 obs. of 19 variables:

我试着用R来执行人工神经网络(ann),我的数据有一些分类/因子变量。据我所知,我需要创建一些虚拟变量来处理这个问题,我可能需要将这些变量引入到模型中

我尝试使用
model.matrix
方法创建了ann模型。但是,我不能用测试数据计算它,测试数据的格式与培训数据的格式完全相同,只有sales列除外

我知道问题发生在我创建虚拟变量之后。模型找不到相同的列名,无法计算。如何使用测试数据并计算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

库(neuralnet)

df你有142个观察值和19个变量。 其中一个变量“颜色”有17个级别。 当您以75/25的比例将数据拆分为训练/测试时,这意味着您的测试集将有0.25*142或大约35个观察值。这意味着,对于一个包含17个类别的变量,您可能会发现测试中的观察结果中缺少一些甚至许多类别。 也许您需要更多的数据或更少的类别。 “颜色”类别是否可以合并为一个较小的数字? 从模型中删除“颜色”时会发生什么


你能得到更多的数据吗?如果不可能,您可以使用“抖动”方法来增加数据的大小。

如果您可以用“ann”来澄清您所指的内容,这会有所帮助如果你可以使用可复制的数据。我使用人工神经网络作为人工神经网络。在这行
列中,如果这不起作用,并且你需要额外的帮助,我建议你使用
dput()
,而不是
str()
将数据添加到你的问题中。实际上,我不确定这是否是问题。因为
col\u list
只是对我的列名进行了排序,而我的列名是由
model.matrix
修改的,它的结果是这样的(当然有虚拟变量)
sales~category+mm+profile+nv+vp+color+cli+stylec+rtn+dev+stosale+dm1+dm2+dm3+grossp+grossDM+firstsp+qty
因此我可以将其用作neuralnet的公式。我用“dput”检查了我的数据,但对于这个来说它太大了。
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])