构建RF时下标超出边界

构建RF时下标超出边界,r,random-forest,R,Random Forest,我正试图基于r中的随机林构建一个分类器 用于复制此内容的代码: library(quantmod) library(randomForest) getSymbols('^GSPC', from="2002-01-01") GSPC <- GSPC[,1:5] # remove adjusted close GSPC$wkret <- lag(GSPC$GSPC.Close,-5)/GSPC$GSPC.Close # build weekly

我正试图基于r中的随机林构建一个分类器

用于复制此内容的代码:

    library(quantmod)
    library(randomForest)

    getSymbols('^GSPC', from="2002-01-01") 
    GSPC <- GSPC[,1:5] # remove adjusted close
    GSPC$wkret <- lag(GSPC$GSPC.Close,-5)/GSPC$GSPC.Close # build weekly future return
    GSPC$wkret <- GSPC$wkret * 100 -100 # build index

    cutoff <- floor(dim(GSPC)[1]/4) # select the row at 25%
    cutoffbreak <- sort(abs(as.data.frame(GSPC$wkret)[,1]),decreasing=T)[cutoff] # get the top 25% return in absolute terms
    y <- cut(GSPC$wkret, breaks=c('-100',-cutoffbreak,cutoffbreak ,'100'),labels=c('down','','up')) # build factors 
    randomForest(GSPC[1:100],y[1:100]) # select first 100 to exclude NA's, dimension problems.
这是可行的(但毫无意义):

但建立一个森林可以:

> rf <- randomForest(y[1:100] ~ .,data=x[1:100])
Error in randomForest.default(m, y, ...) : subscript out of bounds

> traceback()
4: randomForest.default(m, y, ...)
3: randomForest(m, y, ...)
2: randomForest.formula(y[1:100] ~ ., data = x[1:100])
1: randomForest(y[1:100] ~ ., data = x[1:100])

使用公式和数据参数调用randomForest非常常见,但是
x[1:100]
不是矩阵,而是向量。我想你的意思是
x[1:100,]

此外,数据的参数应该是数据帧,而不是矩阵。我假设x是一个矩阵(而不是一个数据帧),因为
x[1:100]
将返回以下错误消息:

Error in `[.data.frame`(x, 100) : undefined columns selected
或者,根据注释建议,您也可以运行

randomForest( x[ 1:100, ], y[ 1:100 ] )

使用公式和数据参数调用randomForest非常常见,但是
x[1:100]
不是矩阵,而是向量。我想你的意思是
x[1:100,]

此外,数据的参数应该是数据帧,而不是矩阵。我假设x是一个矩阵(而不是一个数据帧),因为
x[1:100]
将返回以下错误消息:

Error in `[.data.frame`(x, 100) : undefined columns selected
或者,根据注释建议,您也可以运行

randomForest( x[ 1:100, ], y[ 1:100 ] )

当我创建y时,出现了一些错误。 当我添加以下内容时,代码运行良好:

    y <- as.factor(as.numeric(y))
y随机森林(na.omit(GSPC),y[1:2713])
randomForest.default中出错(na.omit(GSPC),y[1:2713]):
下标越界
>y随机森林(na.omit(GSPC),y[1:2713])
电话:
随机森林(x=na.omit(GSPC),y=y[1:2713])
随机森林类型:分类
树木数目:500
每次拆分时尝试的变量数:2
OOB错误率估计:0.07%
混淆矩阵:
1.2.3类错误
1 348    1   0 0.002865330
2   0 2034   0 0.000000000
3   0    1 329 0.003030303

我创建y时出现了一些问题。 当我添加以下内容时,代码运行良好:

    y <- as.factor(as.numeric(y))
y随机森林(na.omit(GSPC),y[1:2713])
randomForest.default中出错(na.omit(GSPC),y[1:2713]):
下标越界
>y随机森林(na.omit(GSPC),y[1:2713])
电话:
随机森林(x=na.omit(GSPC),y=y[1:2713])
随机森林类型:分类
树木数目:500
每次拆分时尝试的变量数:2
OOB错误率估计:0.07%
混淆矩阵:
1.2.3类错误
1 348    1   0 0.002865330
2   0 2034   0 0.000000000
3   0    1 329 0.003030303


这是使用randomForest公式界面的一种非常奇怪的方式。尝试直接传递
x
y
参数。x[1:100]不是矩阵,而是向量。这是行不通的。@是的;不确定RF是否会强制到matrix,如果他们切换到
y=y[1:100],x=x[1:100]
或不切换到matrix。虽然其他人可能知道你在使用什么,但对我来说,这是不可复制的。请使用
dput
(请参阅)。为什么你要将前100行的4行对象子集化呢。这是你对再现性的尝试吗<代码>>GSPC$[lagged column on close]错误:“GSPC$[”中出现意外“[”,这是使用randomForest公式界面的一种非常奇怪的方式。请尝试直接传递
x
y
参数。x[1:100]不是矩阵,而是向量。这不起作用。@January Yeah;不确定RF是否会强制到矩阵,如果他们切换到
y=y[1:100],x=x[1:100]
或不切换到矩阵。尽管其他人可能知道你在用什么,但对我来说它不是可复制的。请使用
dput
(请参阅)。你为什么要对4行对象的前100行进行子集设置?呃。这是你对再现性的尝试吗?
>GSPC$[lagged column on close]错误:在“GSPC$[”
中出现意外的“[”是,但我不确定你对
x[1:100]的理解在技术上是否正确
是一个向量。OP暗示
x
是一个xts对象,这有点不同。创建一个
xts
对象,然后使用
is.vector
is.matrix
。我想你可能会感到惊讶。该死!我忽略了这一点。事实上,我刚刚验证了我可以传递
xts
对象目录直接使用randomForest
x
参数,而不必首先将其强制为矩阵。xts对象是一个矩阵(具有索引属性)@January,谢谢,但我应该提到,在验证其是否具有相同的属性(光学属性)后,将其删除是故障排除的一部分结果。您的代码给出了与以前相同的错误。是的,但我不确定您关于
x[1:100]的技术正确性
是一个向量。OP暗示
x
是一个xts对象,这有点不同。创建一个
xts
对象,然后使用
is.vector
is.matrix
。我想你可能会感到惊讶。该死!我忽略了这一点。事实上,我刚刚验证了我可以传递
xts
对象目录直接删除randomForest
x
参数,而不必首先将其强制为矩阵。xts对象是矩阵(具有索引属性)@January,谢谢,但我应该提到,此删除是作为故障排除的一部分完成的,在验证其给出相同的(光学)结果后。您的代码给出的错误与以前相同。
    > randomForest(na.omit(GSPC),y[1:2713])
    Error in randomForest.default(na.omit(GSPC), y[1:2713]) : 
      subscript out of bounds
    > y <- as.factor(as.numeric(y))
    > randomForest(na.omit(GSPC),y[1:2713])

    Call:
     randomForest(x = na.omit(GSPC), y = y[1:2713]) 
                   Type of random forest: classification
                         Number of trees: 500
    No. of variables tried at each split: 2

            OOB estimate of  error rate: 0.07%
    Confusion matrix:
        1    2   3 class.error
    1 348    1   0 0.002865330
    2   0 2034   0 0.000000000
    3   0    1 329 0.003030303