R - XGBoost:构建 DMatrix 时出错
R - XGBoost: Error building DMatrix
我在 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
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 becchi@ubuntu:~/Documents/EEG_DATA/Dados_Eye$
如你所见,它们都是DataFrames。
我不知道我做错了什么,请帮忙!
检查是否所有列中都有数字数据 - 我认为这可能是因为您有一些列将数据存储为因子/字符,无法将其转换为矩阵。如果您有因子变量,则可以使用单热编码将它们转换为虚拟变量。
只需先使用as.matrix()
将数据帧转换为矩阵,然后传递给xgb.Dmatrix()
。
"As you can see, they are both DataFrames." - 加布里埃尔·查韦斯·贝奇
数据框只是一个向量列表。可能是您看到 "list".
的原因
尝试:
dtrain = xgb.DMatrix(as.matrix(sapply(data_train, as.numeric)), label=label_train)
而不仅仅是:
dtrain = xgb.DMatrix(data_train, label=label_train)
我在 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
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 becchi@ubuntu:~/Documents/EEG_DATA/Dados_Eye$
如你所见,它们都是DataFrames。
我不知道我做错了什么,请帮忙!
检查是否所有列中都有数字数据 - 我认为这可能是因为您有一些列将数据存储为因子/字符,无法将其转换为矩阵。如果您有因子变量,则可以使用单热编码将它们转换为虚拟变量。
只需先使用as.matrix()
将数据帧转换为矩阵,然后传递给xgb.Dmatrix()
。
"As you can see, they are both DataFrames." - 加布里埃尔·查韦斯·贝奇
数据框只是一个向量列表。可能是您看到 "list".
的原因尝试:
dtrain = xgb.DMatrix(as.matrix(sapply(data_train, as.numeric)), label=label_train)
而不仅仅是:
dtrain = xgb.DMatrix(data_train, label=label_train)