R -XG增强:构建DMatrix时出错

zdwk9cvp  于 2023-03-10  发布在  其他
关注(0)|答案(4)|浏览(132)

我在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))
}

此函数称为my the 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:~/文档/脑电图数据/Dados眼睛$ Rscript main.R
[1]正确
[1]正确
xgb.DMatrix中的错误(数据_train,标签=标签_train):
xgb.DMatrix:不支持从列表构造调用:train_xgt -〉xgb.DMatrix执行暂停bechi @ubuntu:~/文档/EEG_DATA/Dados_Eye$
如您所见,它们都是DataFrame。
我不知道我做错了什么,请帮帮我!

rsl1atfo

rsl1atfo1#

只需先使用as.matrix()将 Dataframe 转换为矩阵,然后传递给xgb.Dmatrix()

wtzytmuj

wtzytmuj2#

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

lc8prwob

lc8prwob3#

试试看:

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

而不仅仅是:

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

jfewjypa4#

替换此行:

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

使用以下行:

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

Dataframe 必须在处理前转换为矩阵

相关问题