HyperAIHyperAI

Tutorial Zur Klassifizierungsvorhersage Des Brustkrebsdiagnose-Datensatzes Durch Maschinelles Lernen

1. Tutorial-Übersicht

Tool-/Software-Einführung

  1. Kernwerkzeuge: R-Sprache (Plattform für statistische Berechnungen und maschinelles Lernen) und wichtige Bibliotheken
    • Datenverarbeitung:tidyverse(Enthalten dplyr Datenmanipulation, ggplot2 Visualisierung usw.)
    • Modellierungswerkzeuge:caret(Einheitlicher Modellierungsprozess), glmnet(Regularisierte logistische Regression), ranger(Effizienter Random Forest), class(Unterstützung des grundlegenden KNN-Algorithmus)
    • Visualisierungstools:corrplot(Korrelations-Heatmap), GGally(Multivariate Datenvisualisierung)
  2. Entwicklungshintergrund: Basierend auf dem Wisconsin Breast Cancer Diagnosis Dataset (WDBC) demonstriert dieses Dokument den gesamten maschinellen Lernprozess für binäre Klassifizierungsprobleme (von der Datenvorverarbeitung bis zur Modellbereitstellung und -auswertung).

Lernziele

  1. Beherrschen Sie den standardisierten Vorverarbeitungsprozess medizinischer Datensätze (einschließlich Entfernung redundanter Merkmale, Screening hochkorrelierter Merkmale, Datenaufteilung und -standardisierung).
  2. Sie beherrschen den Aufbau von drei klassischen Klassifizierungsmodellen: regularisierte logistische Regression (glmnet), Random Forest (einschließlich effizienter Ranger-Implementierung) und KNN und verstehen deren anwendbare Szenarien.
  3. Generieren und interpretieren Sie zentrale Visualisierungsergebnisse wie beispielsweise Merkmalskorrelations-Heatmaps, Diagramme zum Beitrag der Hauptkomponentenvarianz, Diagramme zum Vergleich der Modellleistung und Diagramme zur Rangfolge der Merkmalswichtigkeit.
  4. Identifizieren Sie die wichtigsten Merkmale der Brustkrebsdiagnose (wie z. B. area_worst , perimeter_worst) und seine klinische Bedeutung.

2. Einige vorläufige Vorbereitungen (kann durch das von OpenBayes veröffentlichte Tutorial geklont werden)

Beschreibung der Kerndatei

  1. Datensatz:data.csv(569 Proben, 30 Kernmerkmale, gekennzeichnet als gutartig (B)/bösartig (M), einschließlich id(Probennummer), diagnosis(Diagnoseergebnisse) und 30 morphologische Merkmale).
  2. Codedateien: Enthält ein vollständiges R-Skript zum Laden der Daten → Vorverarbeitung → EDA → Feature Engineering → Modellierung → Auswertung (kann direkt ausgeführt werden, der Datenpfad muss ersetzt werden).
  3. Liste der Abhängigkeitsbibliotheken(Installationsbefehl):
install.packages(c("tidyverse", "caret", "ranger", "corrplot", "GGally", "glmnet"))

Wichtige technische Prozesse

  1. Datenvorverarbeitung: Daten laden → redundante Spalten entfernen (wie z.B. X , id) → Konvertierung des Beschriftungstyps (Faktorisierung) → Prüfung auf fehlende Werte.
  2. Feature-Engineering: Berechnen Sie die Merkmalskorrelationsmatrix → Screenen Sie stark korrelierte Merkmale (Schwellenwert 0,9) → Dimensionsreduktion und Visualisierung der Hauptkomponentenanalyse (PCA).
  3. Modellierungsprozess:Datensatzaufteilung (8:2 Trainingssatz/Testsatz) → 10-fache Kreuzvalidierungsparameteroptimierung → Paralleles Training von drei Modellen → Verwirrungsmatrix und Bewertung der Leistungsindikatoren.
  4. Bewertungsindikatoren:Genauigkeit, Fläche unter der ROC-Kurve (AUC), Sensitivität (Sensitivität, maligne Erkennungsrate), Spezifität (Spezifität, gutartige Erkennungsrate).

3. Praktische Bedienungsschritte

Umgebungseinrichtung

  1. Installieren Sie R (Download von der offiziellen Website) und RStudio (empfohlene IDE,Download von der offiziellen Website).
  2. Installieren Sie abhängige Bibliotheken (siehe „Liste der Abhängigkeitsbibliotheken“ oben).

Laden und Vorverarbeiten von Daten

# 加载库
library(tidyverse)  # 数据处理核心库
library(caret)      # 建模与评价工具

加载数据(替换为实际路径)
data <- read.csv("path/to/data.csv")  
预处理:移除冗余列(X 为索引列,id 为样本编号,均非特征)
data <- data %>% select(-X, -id)  
标签转换:将 diagnosis(B/M)转为因子类型(分类模型要求)
data$diagnosis <- as.factor(data$diagnosis)  
查看数据结构(确认特征类型与样本量)
str(data)  
检查缺失值(该数据集无缺失,实际场景可补充插补步骤)
colSums(is.na(data))

Explorative Datenanalyse (EDA)

Kernziele: Merkmalsverteilung und -korrelation verstehen und Multikollinearitätsprobleme identifizieren.

library(corrplot)  # 相关性热图工具

计算特征相关性矩阵(排除标签列)
data_corr <- cor(data %>% select(-diagnosis))  
绘制聚类排序的相关性热图(便于识别高相关特征群)
corrplot(data_corr, order = "hclust", tl.cex = 0.6, addrect = 8)

Interpretation der Ergebnisse:

  • Radius(radius),Perimeter(perimeter),Bereich(area) und andere Merkmale weisen eine Korrelation von mehr als 0,9 auf, was auf eine schwerwiegende Multikollinearität hinweist und ein Merkmalsscreening zur Beseitigung von Redundanz erfordert.

Hauptkomponentenanalyse (PCA)

Kernziele:Vereinfachen Sie die Datenstruktur, indem Sie die Dimensionalität reduzieren, wichtige Informationen beibehalten und visualisieren.

library(GGally)  # 多元可视化工具

步骤 1:移除高相关特征(阈值 0.9)
high_corr_indices <- findCorrelation(data_corr, cutoff = 0.9)  # 筛选高相关特征索引 
data2 <- data %>% select(-all_of(names(data)[high_corr_indices])) # 移除冗余特征 步骤 2:执行 PCA(需标准化与中心化) pca_data2 <- prcomp(data2, scale = TRUE, center = TRUE) 步骤 3:可视化方差贡献(确定核心主成分) explained_variance <- pca_data2$sdev^2 / sum(pca_data2$sdev^2) # 单个主成分方差占比
cumulative_variance <- cumsum(explained_variance) # 累积方差占比 variance_data <- data.frame(
PC = 1:length(explained_variance),
ExplainedVariance = explained_variance,
CumulativeVariance = cumulative_variance
)
ggplot(variance_data, aes(x = PC)) +
geom_bar(aes(y = ExplainedVariance), stat = "identity", fill = "skyblue", alpha = 0.7) +
geom_line(aes(y = CumulativeVariance), color = "red", size = 1) +
geom_point(aes(y = CumulativeVariance), color = "red") +
labs(
title = "主成分方差贡献图",
x = "主成分",
y = "方差解释比例"
) +
scale_y_continuous(sec.axis = sec_axis(~., name = "累积方差解释比例")) +
theme_minimal()

Interpretation der Ergebnisse: Die kumulierte erklärte Varianz der ersten drei Hauptkomponenten beträgt etwa 70%-80%, was zur Vereinfachung des Modells verwendet werden kann.

Schritt 4: Visualisierung der Assoziation zwischen Hauptkomponenten und Diagnosebezeichnungen

# 提取前 3 个主成分得分,关联诊断标签
pca_scores <- as.data.frame(pca_data2$x[, 1:3])  # 前 3 个主成分
pca_scores$diagnosis <- data$diagnosis  # 加入诊断标签

绘制散点矩阵(含相关性、密度分布)
ggpairs(
pca_scores,
columns = 1:3,
mapping = aes(color = diagnosis, fill = diagnosis),
upper = list(continuous = wrap("cor", size = 3)), # 上三角:相关性
lower = list(continuous = "points"), # 下三角:散点图
diag = list(continuous = wrap("densityDiag")) # 对角线:密度分布
) +
theme_minimal() +
scale_color_manual(values = c("B" = "salmon", "M" = "cyan3")) +
scale_fill_manual(values = c("B" = "salmon", "M" = "cyan3"))

Interpretation der Ergebnisse: Die Verteilung der bösartigen (M) und gutartigen (B) Proben auf den ersten drei Hauptkomponenten ist signifikant unterschiedlich, was darauf hindeutet, dass PCA die Klassifizierungsinformationen effektiv beibehält.

Modelltraining

Datensatzaufteilung (8:2)

set.seed(123)  # 固定随机种子,保证结果可复现

组合标签与处理后特征(便于建模)
data3 <- cbind(diagnosis = data$diagnosis, data2)  
按标签分层抽样(维持训练集/测试集类别比例一致)
data_sampling_index <- createDataPartition(data3$diagnosis, times = 1, p = 0.8, list = FALSE)
data_training <- data3[data_sampling_index, ] # 训练集(80%)
data_testing <- data3[-data_sampling_index, ] # 测试集(20%) 定义交叉验证策略(10 折交叉验证,计算分类概率与二分类指标)
data_control <- trainControl(
method = "cv",
number = 10,
classProbs = TRUE,
summaryFunction = twoClassSummary # 输出 ROC 、灵敏度、特异度
)

1. Regularisierte logistische Regression (glmnet)

# 训练模型(带 L1/L2 正则化,自动调优参数)
model_glmnet <- train(
  diagnosis ~ ., 
  data = data_training, 
  method = "glmnet",  # 正则化逻辑回归
  metric = "ROC",  # 以 ROC 为优化目标
  preProcess = c("scale", "center"),  # 特征标准化
  tuneLength = 20,  # 20 组参数候选
  trControl = data_control
)

2. Random Forest (zwei Implementierungen)

Methode 1:ranger Paket (effiziente Implementierung)

library(ranger)  # 快速随机森林工具

model_rf_ranger <- ranger(
diagnosis ~ .,
data = data_training,
probability = TRUE, # 输出概率
importance = "impurity", # 计算特征重要性(不纯度)
num.trees = 500 # 500 棵决策树
)

Methode 2:caret Paket integriert rf(Einfach für die Kreuzvalidierung)

model_rf_caret <- train(
  diagnosis ~ ., 
  data = data_training, 
  method = "rf",  # 传统随机森林
  metric = "ROC", 
  trControl = data_control,
  ntree = 500  # 500 棵决策树
)

3. KNN (K nächste Nachbarn)

# 训练模型(优化邻居数 k)
model_knn <- train(
  diagnosis ~ ., 
  data = data_training, 
  method = "knn", 
  metric = "ROC", 
  preProcess = c("scale", "center"),  # KNN 对距离敏感,必须标准化
  trControl = data_control, 
  tuneLength = 31  # 测试 k= 1 到 31 的最优值
)

可视化不同 k 值的 ROC 表现(确定最优 k)
plot(model_knn, main = "KNN 模型不同邻居数的 ROC 表现")

Modellvorhersage und -bewertung

1. Vorhersageergebnisse und Konfusionsmatrix

Nehmen wir als Beispiel die logistische Regression:

# 测试集预测
prediction_glmnet <- predict(model_glmnet, data_testing)

生成混淆矩阵(评估分类准确性)
cm_glmnet <- confusionMatrix(prediction_glmnet, data_testing$diagnosis, positive = "M")
cm_glmnet # 输出准确率、灵敏度、特异度等指标

Visualisierung der Verwirrungsmatrix:

# 转换为数据框用于绘图
cm_table <- as.table(cm_glmnet$table)
cm_df <- as.data.frame(cm_table)
colnames(cm_df) <- c("实际标签", "预测标签", "频数")

ggplot(cm_df, aes(x = 实际标签, y = 预测标签, fill = 频数)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "lightblue", high = "blue") +
geom_text(aes(label = 频数), color = "black", size = 6) +
labs(title = "逻辑回归混淆矩阵", x = "实际诊断", y = "预测诊断") +
theme_minimal()

2. Analyse der Merkmalswichtigkeit

Bedeutung der Random-Forest-Funktion:

# 提取前 10 个重要特征
importance_rf <- model_rf_ranger$variable.importance  # ranger 模型结果
importance_df <- data.frame(
  特征 = names(importance_rf), 
  重要性 = importance_rf
) %>% arrange(desc(重要性)) %>% slice(1:10)  # 取前 10

可视化
ggplot(importance_df, aes(x = reorder(特征, 重要性), y = 重要性)) +
geom_bar(stat = "identity", fill = "skyblue") +
coord_flip() + # 横向条形图,便于阅读特征名
labs(title = "随机森林 Top10 重要特征", x = "特征", y = "重要性(不纯度下降)") +
theme_minimal()

Wichtigste Ergebnisse:area_worst(maximale Tumorfläche), perimeter_worst(Der maximale Umfang des Tumors) ist das Kernmerkmal zur Unterscheidung zwischen gutartigen und bösartigen Tumoren, was mit der klinischen Erkenntnis übereinstimmt.

IV. Modellvergleich und Ergebnisinterpretation

Leistungsvergleich mehrerer Modelle

# 汇总所有模型
model_list <- list(
  逻辑回归 = model_glmnet, 
  随机森林 = model_rf_caret, 
  KNN = model_knn
)

提取交叉验证结果
results <- resamples(model_list)
输出性能指标(ROC 、灵敏度、特异度)
summary(results)

Visueller Vergleich:

# 箱线图:展示各模型 ROC 分布
bwplot(results, metric = "ROC", main = "模型 ROC 性能对比(10 折交叉验证)")

点图:带 95% 置信区间的性能指标
dotplot(results, metric = c("ROC", "Sens", "Spec"), main = "模型性能指标对比")

Interpretation der Ergebnisse:

  • Die logistische Regression schnitt am besten ab (ROC = 0,993, Sensitivität = 0,989) und war als Basismodell geeignet.
  • Die Leistung von Random Forests ähnelt der einer logistischen Regression, ist jedoch mit einem höheren Rechenaufwand verbunden.
  • KNN hat eine etwas geringere Spezifität (0,888) und eine etwas höhere Fehlklassifizierungsrate für gutartige Proben.

5. Erweiterte Operationen

Parameteroptimierung

  1. Random Forest-Tuning(Optimierung mtry Parameter, d. h. die Anzahl der Features pro Split):
model_rf_tuned <- train(
  diagnosis ~ ., 
  data = data_training, 
  method = "rf",
  metric = "ROC", 
  trControl = data_control,
  tuneGrid = expand.grid(mtry = seq(5, 15, 2))  # 测试 mtry=5,7,...,15
)
  1. Erweitertes Modell: Support Vector Machine (SVM) hinzufügen
model_svm <- train(
  diagnosis ~ ., 
  data = data_training, 
  method = "svmRadial",  # 径向核 SVM
  metric = "ROC", 
  trControl = data_control
)

VI. Anhang

Schnellsuchtabelle für allgemeine Codes

FunktionCodebeispiel
Datenlesenread.csv("data.csv")
Korrelations-Heatmapcorrplot(cor(data), order = "hclust")
10-fache KreuzvalidierungseinstellungtrainControl(method = "cv", number = 10)
Berechnung der VerwirrungsmatrixconfusionMatrix(pred, actual)
PCA-Dimensionsreduktionprcomp(data, scale = TRUE)

Fehlerbehebung bei häufigen Problemen

  1. Einen Fehler melden could not find function "corrplot"→ Lösung: Installieren corrplot Tasche(install.packages("corrplot")).
  2. Fehler bei der Merkmalsabmessung → Überprüfen Sie, ob es fehlt select(-id, -diagnosis)Schritte (ausgenommen Spalten ohne Funktion).
  3. Das Modelltraining ist langsam → reduzieren ntree(Anzahl der Random-Forest-Bäume) oder tuneLength(Anzahl der Parameterkandidaten).

Mit diesem Lernprogramm können Sie den maschinellen Lernprozess medizinischer binärer Klassifizierungsprobleme meistern, sich auf das Verständnis der Kernlogik des Merkmalsscreenings, der Modelloptimierung und der Ergebnisvisualisierung konzentrieren und eine Referenz für die Modellierung anderer Krankheitsdiagnosen bereitstellen.