R - XGBoost:构建 DMatrix 时出错

Posted

技术标签:

【中文标题】R - XGBoost:构建 DMatrix 时出错【英文标题】:R - XGBoost: Error building DMatrix 【发布时间】:2017-08-02 06:40:54 【问题描述】:

我在 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] 是的

[1] 正确

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

如您所见,它们都是 DataFrame。

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

【问题讨论】:

如果您使用data.matrix() 转换data.frame 输入会怎样? xgboost 可能不喜欢 data.frame 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

“如您所见,它们都是 DataFrame。” ——加布里埃尔·查韦斯·贝奇

数据框只是一个向量列表。可能是您看到“列表”的原因。

【讨论】:

这应该是评论,而不是答案。多一点代表,you will be able to post comments.【参考方案4】:

试试:

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

而不仅仅是:

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

【讨论】:

以上是关于R - XGBoost:构建 DMatrix 时出错的主要内容,如果未能解决你的问题,请参考以下文章

R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table独热编码缺失值删除DMatrix结构生成)

R语言构建xgboost模型:基于稀疏数据(dgCMatrix which is a sparse matrix)稠密数据(dense matrix)xgb.DMatrix数据聚合

R语言实战应用精讲50篇(三十五)-R语言实现xgboost回归(附R语言代码)

xgboost: AttributeError: 'DMatrix' 对象没有属性 'handle'

XGBoost 错误 - 提供分类类型时,DMatrix 参数 `enable_categorical` 必须设置为 `True`

出现module 'xgboost' has no attribute 'DMatrix'的临时解决方法