R中运行LightGBM报错“不支持从data.frame构造”的问题求助
解决LightGBM在R中无法从data.frame构建数据集的问题
我来帮你搞定这个报错!你遇到的问题根源在于你使用的lightgbm_2.2.4版本不支持直接用data.frame类型的数据创建lgb.Dataset,这个旧版本只接受矩阵(matrix)或者稀疏矩阵(比如dgCMatrix)作为输入数据。
解决方法:将data.frame转换为矩阵
只需要在创建lgb.Dataset时,把你的特征数据用as.matrix()转换成矩阵格式就行,修改后的完整代码如下:
library(lightgbm) library(caTools) set.seed(42) # Prepare the dataset for binary classification iris$label <- 0 iris$label[iris$Species=="setosa"] <- 1 iris <- iris[,!(names(iris) %in% "Species")] # Split into train & validation set sample <- sample.split(iris$label, SplitRatio = .75) train <- subset(iris, sample == TRUE) valid <- subset(iris, sample == FALSE) X_train <- train[,!(names(train) %in% "label")] X_valid <- valid[,!(names(valid) %in% "label")] y_train <- train$label y_valid <- valid$label # Train LightGBM - 修改data参数为矩阵格式 dtrain <- lgb.Dataset(data = as.matrix(X_train), label = y_train) dvalid <- lgb.Dataset(data = as.matrix(X_valid), label = y_valid) params <- list(objective = "binary", verbose = 1, seed = 42) lgb_model <- lgb.train(params, dtrain, 200, list(eval = dvalid), verbose_eval=200, early_stopping_round=10)
额外说明
如果你后续有条件升级你的R版本和lightgbm包(比如升级到lightgbm 3.0及以上版本),新版本已经支持直接传入data.frame作为输入,就不会再遇到这个问题了。不过考虑到你当前使用的是R 3.5.2,这个版本比较旧,升级包可能需要注意兼容性,所以先通过转矩阵的方式解决当前问题是最稳妥的。
内容的提问来源于stack exchange,提问作者jackson1234
相关产品推荐
相关产品推荐

