分类伯努利分布中的 GBM 误差
GBM error in classification bernoulli distribution
当运行将 gbm 函数用于分类问题时。我收到以下错误:
Error in res[flag, ] <- predictions : replacement has length zero
我想知道为什么会出现此错误以及如何解决。
我的数据大约有 77 个数值变量(整数)用于分类和 1 个分组因子。数据中没有其他变量。数据中没有缺失数据。分组因子根据需要编码为因子(0,1)。
我的数据结构如下所示:
$Group : Factor w/ 2 levels "0", "1"
$it1 : int
...
$it70 : int
我的模型是这样的:
mod_gbm <- gbm(Group~. distribution = "bernoulli", data=df,
n.trees=1000,shrinkage=.01, n.minobsinnode=5,
interaction.depth = 6, cv.folds=5)
我意识到这个问题与这里的问题非常相似:
Problems in using GBM function to do classification in R
但是那个人想知道如何使用数字变量,唯一的回应是删除 cv.folds。我想在我的模型中保留 cv.folds 并拥有它 运行。
如果你查看 gbm
的插图:
distribution: Either a character string specifying the name of the
distribution to use or a list with a component ‘name’
specifying the distribution and any additional parameters
needed. If not specified, ‘gbm’ will try to guess: if the
response has only 2 unique values, bernoulli is assumed;
otherwise, if the response is a factor, multinomial is
assumed
如果只有两个类,则不需要将其转换为因数。我们可以用 iris 示例来探索这一点,我在其中创建了一个组标签 0/1 :
library(gbm)
df = iris
df$Group = factor(as.numeric(df$Species=="versicolor"))
df$Species = NULL
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)
Error in res[flag, ] <- predictions : replacement has length zero
我得到了同样的错误。所以我们将它转换为数字 0/1,你可以看到它正常工作。
当变量是一个因子时,做as.numeric()
将其转换为1,2,其中1对应于第一级。所以这种情况下,因为 Group 是 0/1 开头:
df$Group = as.numeric(df$Group)-1
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)
我们得到预测:
pred = ifelse(predict(mod_gbm,type="response")>0.5,1,0)
table(pred,df$Group)
pred 0 1
0 98 3
1 2 47
当运行将 gbm 函数用于分类问题时。我收到以下错误:
Error in res[flag, ] <- predictions : replacement has length zero
我想知道为什么会出现此错误以及如何解决。
我的数据大约有 77 个数值变量(整数)用于分类和 1 个分组因子。数据中没有其他变量。数据中没有缺失数据。分组因子根据需要编码为因子(0,1)。
我的数据结构如下所示:
$Group : Factor w/ 2 levels "0", "1"
$it1 : int
...
$it70 : int
我的模型是这样的:
mod_gbm <- gbm(Group~. distribution = "bernoulli", data=df,
n.trees=1000,shrinkage=.01, n.minobsinnode=5,
interaction.depth = 6, cv.folds=5)
我意识到这个问题与这里的问题非常相似: Problems in using GBM function to do classification in R 但是那个人想知道如何使用数字变量,唯一的回应是删除 cv.folds。我想在我的模型中保留 cv.folds 并拥有它 运行。
如果你查看 gbm
的插图:
distribution: Either a character string specifying the name of the
distribution to use or a list with a component ‘name’
specifying the distribution and any additional parameters
needed. If not specified, ‘gbm’ will try to guess: if the
response has only 2 unique values, bernoulli is assumed;
otherwise, if the response is a factor, multinomial is
assumed
如果只有两个类,则不需要将其转换为因数。我们可以用 iris 示例来探索这一点,我在其中创建了一个组标签 0/1 :
library(gbm)
df = iris
df$Group = factor(as.numeric(df$Species=="versicolor"))
df$Species = NULL
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)
Error in res[flag, ] <- predictions : replacement has length zero
我得到了同样的错误。所以我们将它转换为数字 0/1,你可以看到它正常工作。
当变量是一个因子时,做as.numeric()
将其转换为1,2,其中1对应于第一级。所以这种情况下,因为 Group 是 0/1 开头:
df$Group = as.numeric(df$Group)-1
mod_gbm <- gbm(Group~.,distribution ="bernoulli", data=df,cv.folds=5)
我们得到预测:
pred = ifelse(predict(mod_gbm,type="response")>0.5,1,0)
table(pred,df$Group)
pred 0 1
0 98 3
1 2 47