我在R中使用XGBoost时遇到了问题。我正在读取一个包含数据的CSV文件:
get_data = function(){#加载数据path = "dados_eye.csv"data = read.csv(path)#分为两组train_porcentage = 0.05train_lines = nrow(data)*train_porcentagetrain = 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) }
这是错误信息:
@ubuntu:~/Documents/EEG_DATA/Dados_Eye$ Rscript main.R
[1] TRUE
[1] TRUE
Error in xgb.DMatrix(data_train, label = label_train) :
xgb.DMatrix: does not support to construct from list Calls: train_xgt -> xgb.DMatrix Execution halted @ubuntu:~/Documents/EEG_DATA/Dados_Eye$
如您所见,它们都是数据框。
我不知道自己做错了什么,请帮助我!
回答:
只需先使用as.matrix()
将数据框转换为矩阵,然后再传递给xgb.Dmatrix()
即可。