机器学习R语言实战:随机森林算法实现肿瘤诊断

生信学长
2025年03月07日
机器学习与统计
机器学习R语言实战:随机森林算法实现肿瘤诊断

今天分享一期有机器学习随机森林来筛选肿瘤,主要展示如何利用R语言构建机器学习模型,基于基因表达数据进行癌症分类,完整代码联系老师免费获取。

一、数据准备与预处理

1.1 加载乳腺癌数据集

我们使用 mlbench 包里面的乳腺癌数据集

# install.packages("caret")
# install.packages("mlbench")
# install.packages("pROC")
# install.packages("ggplot2")
# install.packages("randomForest")

# 加载必要包
library(caret)
library(mlbench)
library(pROC)
library(ggplot2)
library(randomForest)

# 载入乳腺癌数据集
data(BreastCancer)
dim(BreastCancer)  # 699个样本 x 11个特征

# 数据预处理
df <- BreastCancer[,-1]  # 移除ID列
df$Class <- factor(make.names(ifelse(df$Class == "malignant", 1, 0)))
df <- df[complete.cases(df), ]  # 移除缺失值

cat("原始数据维度:", dim(BreastCancer))
cat("处理后数据维度:", dim(df))

运行结果:

原始数据维度:699 x 11
处理后数据维度:683 x 10

1.2 数据标准化与分割

# 划分训练集/测试集
set.seed(123)
trainIndex <- createDataPartition(df$Class, p=0.8, list=FALSE)
train <- df[trainIndex, ]
test <- df[-trainIndex, ]

# 标准化处理(中心化+缩放)
preProc <- preProcess(train[,-10], method=c("center""scale"))
train_scaled <- predict(preProc, train)
test_scaled <- predict(preProc, test)

可以看到标准化后的训练集和测试集 train_scaled test_scaled 的数据如下

接下来开始跑随机森林机器学习

二、随机森林模型构建

2.1 模型训练

# 设置交叉验证
ctrl <- trainControl(method="cv",
                    number=5,
                    classProbs=TRUE,
                    summaryFunction=twoClassSummary)

# 训练随机森林模型
rf_model <- train(Class ~ .,
                 data=train_scaled,
                 method="rf",
                 trControl=ctrl,
                 metric="ROC")

上面代码是设置了交叉验证的参数,包括使用5折交叉验证、计算类别概率,并使用 twoClassSummary 函数来评估模型性能,再使用随机森林算法训练模型,并使用前面设置的交叉验证参数来评估模型性能,主要关注ROC曲线下的面积(AUC)。

模型输出:


2.2 模型评估

训练模型后,我们用测试集来验证模型的训练效果

# 测试集预测
pred <- predict(rf_model, newdata=test_scaled)
prob <- predict(rf_model, newdata=test_scaled, type="prob")[,2]

# 混淆矩阵
confusionMatrix(pred, test_scaled$Class)

我们可以看到混淆矩阵(红框部分)

  • 行(Prediction) :模型的预测结果。
  • 列(Reference) :真实的类别标签。
  • X0 X1 是两个类别。
  • 具体数值
    • 85 :模型正确预测为 X0 的样本数(True Positives, TP)。
    • 2 :模型错误地将 X1 预测为 X0 的样本数(False Positives, FP)。
    • 3 :模型错误地将 X0 预测为 X1 的样本数(False Negatives, FN)。
    • 45 :模型正确预测为 X1 的样本数(True Negatives, TN)。

以及关键的统计指标

  1. Accuracy(准确率)
    • 值: 0.963 (96.3%)。
    • 解释:模型在测试集上的整体预测正确率。
  2. 95% Confidence Interval(95% 置信区间)
    • 值: (0.9157, 0.9879)
    • 解释:准确率的置信区间,表示我们有 95% 的置信度认为真实准确率在这个范围内。
  3. No Information Rate(无信息率)
    • 值: 0.6519 (65.19%)。
    • 解释:如果模型总是预测多数类( X0 ),其准确率会达到 65.19%。这里模型的准确率(96.3%)显著高于无信息率,说明模型性能很好。
  4. P-Value [Acc > NIR]
    • 值: <2e-16
    • 解释:这是一个假设检验的 p 值,用于检验模型的准确率是否显著高于无信息率。 <2e-16 表示模型准确率显著高于无信息率。
  5. Kappa(卡帕系数)
    • 值: 0.9188
    • 解释:卡帕系数用于衡量模型预测结果与随机预测的一致性。取值范围为 [-1, 1] ,值越接近 1 表示模型性能越好。 0.9188 表示模型性能非常好。

最后我们绘制来可视化上面的结果

三、可视化分析

3.1 ROC曲线

# ROC曲线
roc_obj <- roc(test_scaled$Class, prob)
ggroc(roc_obj, color="#4E79A7") +
  geom_abline(slope=1, intercept=1, linetype="dashed") +
  ggtitle("ROC") +
  theme_minimal()

ROC 提用于评估模型的分类性能,我们主要关注 ROC 曲线的形状和 AUC 值,值越接近 1 表示模型性能越好。

3.2 特征重要性

# 特征重要性
varImpPlot(rf_model$finalModel
           main="Feature Importance Ranking",
           col="#F28E2B",
           pch=19)

varImp 用于分析随机森林模型中各个特征的重要性。我们主要关注哪些特征的柱子较高,这些特征对模型的预测贡献较大。

总结

我们通过使用乳腺癌数据集,构建随机森林模型来筛选肿瘤样本,主要流程包括完成缺失值处理与标准化,再分割训练集和测试集,使用训练集训练模型,再使用测试集验证,以及最后的ROC,varImp可视化。

完整代码联系老师免费获取(备注“随机森林”)


以上就是今天的内容,希望对你有帮助!欢迎点赞、在看、关注、转发。