【问题标题】:neural net - undefined column selected神经网络 - 选择了未定义的列
【发布时间】:2020-07-29 00:42:18
【问题描述】:

数据分区

我有几个因子变量,所以我决定使用虚拟变量代替 ANN。

set.seed(222)
m <- model.matrix( ~price+month+year+area+larea+otype+cid+rid+did+renovation+nrooms+nbeds+nbaths+nbalcs+wfloor+status, data = data)
ind <- sample(2, nrow(m), replace = TRUE, prob = c(0.8, 0.2))
training <- m[ind==1,]
testing <- m[ind==2,]

神经网络

n <- neuralnet(price~.,
                data = training,
                hidden = 1,
                err.fct = "sse",
                linear.output = FALSE)

[.data.frame(data, , model.list$variables) 中的错误: 选择了未定义的列

我使用点是因为我有 94​​ 个解释变量。当我对两个解释变量运行价格以查看问题所在时。点有一些问题,它只用于线性回归,我弄错了吗?我该如何解决这个问题?

【问题讨论】:

  • 能否请您检查price是否是'm'中的列名之一。如果没有一个小的可重现示例,很难知道发生了什么
  • 我已经检查过了,这是确切的名称,小p等。我认为点有问题。
  • 我输入了,如果有帮助,我编辑了我的帖子。
  • 帖子中的data 是什么。否则,我们会得到错误
  • 一开始数据名称是“data”,后来我使用虚拟变量时,它被称为m,但是对于ann我需要测试和训练数据,因此对于神经网络我使用训练数据。跨度>

标签: r neural-network


【解决方案1】:

model.matrixmatrix 而不是 data.frame。根据?neuralnet

data - 包含公式中指定变量的数据框。


因此,我们可能需要使用as.data.frame 转换为data.frame,因为这可以与data.frame 输入一起正常工作

library(neuralnet)
data(iris)
nn <- neuralnet(Species~ ., iris, 
        linear.output = FALSE, hidden = 1, err.fct = "sse")
nn$weights
#[[1]]
#[[1]][[1]]
#           [,1]
#[1,]  -9.900398
#[2,]  -1.527258
#[3,] -13.201669
#[4,]  11.624309
#[5,]  17.896367

#[[1]][[2]]
#          [,1]      [,2]      [,3]
#[1,]  32.51005 -4.014045 -4.303671
#[2,] -65.72300  4.013259  4.304652

在 OP 的代码中,问题在于 model.matrix 创建了具有非标准名称的列名。可以使用make.unique将其转换为标准名称

names(training) <- make.names(names(training))
n <- neuralnet(price ~ ., 
            data = training,
            hidden = 1,
            err.fct = "sse", 
      linear.output = FALSE)



n$weights
#[[1]]
#[[1]][[1]]
#              [,1]
# [1,]  -0.62625018
# [2,]   1.39124245
# [3,]  -2.59472834
# [4,]   0.27773897
# [5,]   7.15830865
# [6,]  -2.93583230
# ...

【讨论】:

  • 我已经将矩阵转换为数据帧总线仍然无法正常工作。我还有其他方法可以使用吗?
  • @JuliAvlokhashvili 当您将model.matrix转换为data.frame时,请检查列名,因为如果我没记错的话,它会添加一个前缀
  • @JuliAvlokhashvili 列名将被更改,即colnames(model.matrix(~ Species -1, iris))# [1] "Speciessetosa" "Speciesversicolor" "Speciesvirginica"
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 2012-04-29
  • 2019-01-01
  • 2021-02-07
  • 2020-04-25
  • 2016-10-28
  • 2011-08-10
  • 2013-12-20
相关资源
最近更新 更多