R语言中的偏最小二乘回归PLS-DA
原文链接:http://tecdat.cn/?p=8890
主成分回归(PCR)的方法 本质上是使用第一个方法的普通最小二乘(OLS)拟合
来自预测变量的主成分(PC)。这带来许多优点:
- 预测变量的数量实际上没有限制。
- 相关的预测变量不会破坏回归拟合。
但是,在许多情况下,执行类似于PCA的分解要明智得多。
今天,我们将 在Arcene数据集上执行PLS-DA, 其中包含100个观察值和10,000个解释变量。
让我们开始使用R
癌症/无癌标签(编码为-1 / 1)存储在不同的文件中,因此我们可以将其直接附加到完整的数据集,然后使用公式语法来训练模型。
# Load caret, install if necessarylibrary(caret)arcene <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/arcene/ARCENE/arcene_train.data", sep = " ", colClasses = c(rep("numeric", 10000), "NULL"))# Add the labels as an additional columnarcene$class <- factor(scan("https://archive.ics.uci.edu/ml/machine-learning-databases/arcene/ARCENE/arcene_train.labels", sep = "t"))
现在的主要问题是:
- 我们如何根据其血清的MS谱准确预测患者是否生病?
- 哪种蛋白质/ MS峰最能区分患者和健康患者?
关于预处理,我们将使用preProc参数以精确的顺序删除零方差预测变量,并对所有剩余的变量进行标准化。考虑样本的大小(n= 100),我将选择10倍的重复5倍交叉验证(CV)–大量重复补偿了因减少的折叠次数而产生的高方差–总共进行了50次准确性估算。
# Compile cross-validation settingsset.seed(100)myfolds <- createMultiFolds(arcene$class, k = 5, times = 10)control <- trainControl("repeatedcv", index = myfolds, selectionFunction = "oneSE")
此图描绘了CV曲线,在这里我们可以学习从使用不同数量的LV(x轴)训练的模型中获得的平均准确度(y轴,%)。
现在,我们 进行线性判别分析(LDA)进行比较。 我们还可以尝试一些更复杂的模型,例如随机森林(RF)。
最后,我们可以比较PLS-DA,PCA-DA和RF的准确性。
我们将使用caret :: resamples编译这三个模型,并借用ggplot2的绘图功能来比较三种情况下最佳交叉验证模型的50个准确性估计值。
显然,长时间的RF运行并没有转化为出色的性能,恰恰相反。尽管三个模型的平均性能相似,但RF的精度差异要大得多,如果我们要寻找一个健壮的模型,这当然是一个问题。在这种情况下,PLS-DA和PCA-DA表现出最好的性能(准确度为63-95%),并且这两种模型在诊断新血清样品中的癌症方面都表现出色。
总而言之,我们将使用PLS-DA和PCA-DA中预测的可变重要性(ViP)确定十种最能诊断癌症的蛋白质。
上面的PLS-DA ViP图清楚地将V1184与所有其他蛋白质区分开。这可能是一个有趣的癌症生物标志物。当然,必须进行许多其他测试和模型以提供可靠的诊断工具。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- matlab导出csv文件多种方法实现
- matlab面向对象编程基础
- Octave数据运算基础教程-ML Note29
- Octave中数据的可视化—ML Note 30
- matplotlib animation FuncAnimation画2D线图
- 坚持一下只需要一个理由就够了
- IGD反转世代距离-多目标优化评价指标概念及实现
- webpack实战——样式文件分离
- matlab绘图工具
- python批量移动文件&重命名代码分享
- [DeeplearningAI 笔记]第一章2.11-2.16 向量化与 python/numpy 向量说明
- 自己动手作图深入理解二叉树、满二叉树及完全二叉树
- Matlab矩阵加入新元素
- 每个Python程序员都应该知道的10个缩写
- 《剑指offer》第九天:斐波那契数列