内容

0.1简介

ClassifyR是一个框架对于交叉验证的分类和要使用的函数的规则如下表所示。一个完整的示例展示了如何将现有的分类器合并到框架中。函数可以在强制参数集之后有任意数量的其他参数。

0.2k最近的邻居

的实现k包中的最近邻算法.它的功能有形式knn(训练,测试,cl, k = 1, l = 0, prob = FALSE,使用。all = TRUE).它接受矩阵或者一个data.frame变量作为输入,但是ClassifyR调用转换、特征选择和分类器函数DataFrame的核心Bioconductor数据容器S4Vectors.它还期望训练数据是第一个参数,它的类是第二个参数,测试数据是第三个参数。因此,为DataFrame创建参数的重新排序。

setMethod("kNNinterface", "DataFrame", function(measurementsTrain, classstrain, measurementsTest,…), verbose = 3) {splitDataset <- .splitDataAndOutcomes(measurementsTrain, classstrain) trainingMatrix <- as.matrix(splitDataset[["measurements"]]) test <- test[, isNumeric, drop = FALSE] if(!requireNamespace("class", quiet = TRUE)) stop("包'class'找不到。"if(verbose == 3) message("拟合k个最近邻分类器到数据和预测类。")class::knn(as.matrix(measurementsTrain), as.matrix(measurementsTest), measurementsTest,…)})

该函数仅在以下情况下发出进度消息详细的是3。在介绍性小插图中解释了详细程度。.splitDataAndOutcomes内部函数在吗ClassifyR这能确保结果不出来测量当进行模型训练时。如果classesTrain是因子向量,则函数没有作用。如果classesTrain列的字符名是否在measurementsTrain,该列将从表中删除,并作为一个单独的变量返回。的...参数捕获要传递到的任何选项然而,,例如k(考虑的邻居数量)和l例如,一个明确的决定需要最少的投票。该函数也是防御性的,它从输入表中删除任何非数字列。

ClassifyR也接受矩阵和一个MultiAssayExperiment作为输入。为这些输入提供方便的方法,将它们转换为DataFrame.这样,才有了DataFrame版本的kNNinterface进行分类。

setMethod("kNNinterface", "matrix", function(measurementsTrain, classstrain, measurementsTest,…){kNNinterface(DataFrame(measurementsTest, check.names = FALSE), classstrain, DataFrame(measurementsTest, check.names = FALSE),…)})setMethod("kNNinterface", "MultiAssayExperiment", function(measurementsTrain, measurementsTest, targets = names(measurementsTrain), classstrain,…){tablesAndClasses <- .MAEtoWideTable(measurementsTrain, targets,classstrain) trainingTable <- tablesAndClasses[["dataTable"]] classes <- tablesAndClasses[["outcomes"]] testingTable <- .MAEtoWideTable(measurementsTest, targets) .checkVariablesAndSame(trainingTable, testingTable) kNNinterface(trainingTable, classes, testingTable,…)})

矩阵方法只涉及到输入矩阵的转置ClassifyR期望在行中存储特征,在列中存储样本(在生物信息学中习惯),并将它们转换为DataFrame,它为a分派到kNNinterface方法DataFrame,进行分类。

的转换MultiAssayExperiment更复杂。ClassifyR有一个内部函数.MAEtoWideTable它将MultiAssayExperiment到一个广泛的DataFrame目标指定转换中要包括哪些检测。默认情况下,它还可以过滤结果表,使其只包含数值变量。内部效度函数.checkVariablesAndSame检查过滤后至少有一列,并且训练表和测试表具有相同数量的变量。

0.3验证实现

创建一个包含10个样本和10个特征的数据集,这两个类之间有明显的区别。运行免删减交叉验证。

classes <- factor(rep(c("Healthy", "Disease"),各= 5),levels = c("Healthy", "Disease")) measurements <- matrix(c(rnorm(50,10), rnorm(50,5)), ncol = 10) colnames(measurements) <- paste("Sample", 1:10) rownames(measurements) <- paste("mRNA", 1:10) library(ClassifyR) knnParams <- ModellingParams(selectParams = NULL, trainParams = trainParams (kNNinterface), predictParams = NULL) CVparams <- CrossValParams(" leave -k- out ", leave = 1) classified <- runTests(measurements, classes, CVparams,knnParams)分类
类ClassifyResult的对象。##特征:##特征值##分类器名称k最近邻##交叉验证省略1 ##特征:特征标识符长度为10的列表。##预测:10行的数据帧。##性能度量:尚未计算。
cbind(预测(分类),已知=实际结果(分类))
样本亚群已知## 1 mRNA 1 1疾病健康## 2 mRNA 2 2疾病健康## 3 mRNA 3 3健康健康## 4 mRNA 4 4疾病健康## 5 mRNA 5 5疾病健康## 6 mRNA 6 6疾病疾病## 7 mRNA 7 7健康疾病## 8 mRNA 8 8疾病疾病## 9 mRNA 9 9疾病疾病## 10 mRNA 10 10健康疾病

而不是指定一个函数PredictParams因为一个函数负责训练和预测。对于这个简单的任务,分类器正确地预测了所有样本。

0.4附录:关于新函数输入变量的规则

这个论点详细的是从小牛因此它们必须处理它,即使没有显式地使用它。在ClassifyR框架,详细的是一个数字,指示要打印的进度消息的数量。如果verbose为0,则不打印任何进度消息。如果是1,则每完成10个交叉验证,只打印一条消息。如果它是2,除了当它是1时打印的消息外,每次完成分类的一个阶段(转换、特征选择、训练、预测)时,都会打印一条消息。如果是3,除了为值1和2打印消息外,还从分类函数本身打印进度消息。

每个包含的转换、选择、训练和预测函数的一个版本通常用于(1)一个数字矩阵,其中行为特征,列为样本(生物信息学中的数据存储约定)和一个与矩阵列数相同长度的因子向量(2)ADataFrame其中列是自然的特征,可能是不同的数据类型(即分类和数字),行是样本,类规范和(3)MultiAssayExperiment中存储样例类信息的colData槽的DataFrame列名为“class”。对于不是的输入(1和3)DataFrame时,它们被转换为a,因为其他数据类型可以存储为aDataFrame不丢失信息和变换,选择和分类函数所接受的DataFrame包含执行实际计算的代码。至少,新函数必须有一个带a的方法DataFrame作为样本类的输入,要么存储在名为“class”的列中,要么作为因子向量提供。虽然不是必需的,但提供一个接受带有因子向量的数字矩阵的函数版本和另一个接受MultiAssayExperiment的函数版本,以提供输入数据的灵活性是可取的。如果打算实现与分类相关的新函数,请参阅包中现有函数的代码以获得此类示例ClassifyR