R - XGBoost:构建DMatrix时出错

时间:2017-03-12 03:37:38

标签: r dataframe machine-learning xgboost

我在使用R中的XGBoost时遇到问题 我正在阅读包含我的数据的CSV文件:

get_data = function()
{
#Loading Data
path = "dados_eye.csv"
data = read.csv(path)

#Dividing into two groups
train_porcentage = 0.05
train_lines = nrow(data)*train_porcentage
train = data[1:train_lines,]
test = data[train_lines:nrow(data),]
rownames(train) = c(1:nrow(train))
rownames(test) = c(1:nrow(test))

return (list("test" = test, "train" = train))
}

这个函数叫做main.R

lista_dados = get_data()
#machine = train_svm(lista_dados$train)
#machine = train_rf(lista_dados$train)
machine = train_xgt(lista_dados$train)

问题在于train_xgt

train_xgt = function(train_data)
{
data_train = data.frame(train_data[,1:14])
label_train = data.frame(factor(train_data[,15]))

print(is.data.frame(data_train))
print(is.data.frame(label_train))

dtrain = xgb.DMatrix(data_train, label=label_train)
machine = xgboost(dtrain, num_class = 4 ,max.depth = 2, 
    eta = 1, nround = 2,nthread = 2, 
    objective = "binary:logistic")

return (machine)    
}

这是错误:

  

becchi @ ubuntu:〜/ Documents / EEG_DATA / Dados_Eye $ Rscript main.R

     

[1] TRUE

     

[1] TRUE

     

xgb.DMatrix(data_train,label = label_train)中的错误:
  xgb.DMatrix:不支持从列表构建调用:train_xgt    - > xgb.DMatrix执行暂停becchi @ ubuntu:〜/ Documents / EEG_DATA / Dados_Eye $

如您所见,它们都是DataFrame。

我不知道我做错了什么,请帮忙!

4 个答案:

答案 0 :(得分:13)

首先使用as.matrix()将数据框转换为矩阵,然后传递给xgb.Dmatrix()

答案 1 :(得分:1)

检查所有列中是否都包含数字数据 - 我认为这可能是因为您有一些列将数据存储为因子/字符而无法转换为矩阵的列。如果您有因子变量,则可以使用单热编码将它们转换为虚拟变量。

答案 2 :(得分:1)

“如您所见,它们都是数据框。” -加布里埃尔·查韦斯·贝基

数据帧只是向量列表。可能就是您为什么看到“列表”的原因。

答案 3 :(得分:0)

尝试:

dtrain = xgb.DMatrix(as.matrix(sapply(data_train, as.numeric)), label=label_train)

而不只是:

dtrain = xgb.DMatrix(data_train, label=label_train)