我想使用偏最小二乘判别分析(PLS-DA)解决要预测多个类别的分类问题。我知道PLS-DA不仅限于两类问题,而且我相信使用Caret包中的plsda可以解决此问题,但是当我尝试在mlr包中构建PLS-DA模型时,出现错误提示我的任务是“多类问题,但学习者'classif.plsdaCaret'不支持!”
是否可以使用mlr建立多类PLS-DA模型,而我只是使用了错误的学习器?这是一个可重现的示例:
# LOAD PACKAGES ----
#install.packages("BiocManager")
#BiocManager::install("mixOmics")
library(mlr)
library(tidyverse)
library(mixOmics)
# LOAD IN DATA ----
data(liver.toxicity)
liverTib <- as.tibble(cbind(liver.toxicity$treatment$Treatment.Group,
liver.toxicity$gene)
)
names(liverTib)[1] <- "Treatment"
liverTib
# MAKE TASK, LEARNER AND ATTEMPT TO BULD MODEL
liverTask <- makeClassifTask(data = liverTib, target = "Treatment")
plsda <- makeLearner("classif.plsdaCaret")
liverModel <- train(plsda, liverTask)
答案 0 :(得分:1)
在mlr
(v2.14.0.9000)的开发版本中,启用了通过plsdaCaret
模型进行的多类分类。您可以使用以下代码从GitHub下载该软件包:
install.packages("remotes")
remotes::install_github("mlr-org/mlr")
具有3个类的PLS-DA示例:
library(mlr)
#> Loading required package: ParamHelpers
tsk <- makeClassifTask("iris", iris, target = "Species")
lrn1 <- makeLearner("classif.plsdaCaret")
mod1 <- train(lrn1, tsk)
prd <- predict(mod1, tsk)
calculateConfusionMatrix(prd)
#> predicted
#> true setosa versicolor virginica -err.-
#> setosa 50 0 0 0
#> versicolor 0 31 19 19
#> virginica 0 8 42 8
#> -err.- 0 8 19 27
由reprex package(v0.3.0)于2019-07-18创建
({This提取请求解决了该问题。)
答案 1 :(得分:0)
当前实现不支持多类,请参见:https://mlr.mlr-org.com/articles/tutorial/integrated_learners.html
您可以更改学习者(https://github.com/mlr-org/mlr/blob/master/R/RLearner_classif_plsdaCaret.R)的代码以使多类学习成为可能(请参阅此处以获取说明:https://mlr.mlr-org.com/articles/tutorial/create_learner.html)。