在 R 中使用 mlr 包执行多类 PLS-DA

Performing multiclass PLS-DA with mlr package in R

我想使用偏最小二乘判别分析 (PLS-DA) 来解决 class化问题,其中有多个 class 要预测。我知道 PLS-DA 不限于两个 class 问题,我相信使用 Caret 包中的 plsda 可以处理这个问题,但是当我尝试在 mlr 包中构建 PLS-DA 模型时,我收到一条错误消息,告诉我我的任务是 "multiclass-problem, but learner 'classif.plsdaCaret' does not support that!"

是否可以使用 mlr 构建一个 multiclass 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)

当前实现不支持多类,请参阅此处:https://mlr.mlr-org.com/articles/tutorial/integrated_learners.html

您可以更改学习者 (https://github.com/mlr-org/mlr/blob/master/R/RLearner_classif_plsdaCaret.R) to make multiclass possible (see here for an instruction: https://mlr.mlr-org.com/articles/tutorial/create_learner.html) 的代码。

mlr (v2.14.0.9000) 的开发版本中,启用了通过 plsdaCaret 模型进行多类分类。您可以使用此代码从 GitHub 下载软件包:

install.packages("remotes")
remotes::install_github("mlr-org/mlr")

一个 PLS-DA 例子有 3 类:

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 拉取请求解决了问题。)