R语言对于分类变量用支持向量机进行预测并绘制训练集和测试集预测及AUC曲线
时间: 2025-01-01 10:37:37 浏览: 17
在R语言中,可以使用`e1071`包中的`svm()`函数结合`caret`或`tidyverse`等库来进行分类变量的支持向量机(SVM)预测,并通过`ggplot2`库绘制训练集和测试集的预测结果以及ROC曲线(Area Under the Curve)。
首先,你需要安装必要的库:
```sh
install.packages("e1071")
install.packages("caret")
install.packages("tidyverse")
```
然后,假设你已经有了预处理过的数据集`data`,包含特征(`x`)和分类标签(`y`):
```r
library(e1071)
library(caret)
library(tidyverse)
# 划分训练集和测试集
set.seed(123)
trainIndex <- createDataPartition(data$y, p = .8, list = FALSE)
train_data <- data[trainIndex, ]
test_data <- data[-trainIndex, ]
# 使用SVM模型
model_svm <- svm(y ~ x, data = train_data, kernel = "linear" or "radial", # 根据需要选择核函数
cost = tuneGrid$cost, # 如果有交叉验证后的成本参数
probability = TRUE) # 计算概率估计
# 预测并评估性能
predictions_train <- predict(model_svm, newdata = train_data, type = "response")
predictions_test <- predict(model_svm, newdata = test_data, type = "response")
# 计算AUC
auc_train <- roc(train_data$y, predictions_train)$auc
auc_test <- roc(test_data$y, predictions_test)$auc
# 绘制ROC曲线
roc_curve_train <- ggplot(data.frame(fpr = c(0, 1), tpr = c(0, auc_train)), aes(x = fpr, y = tpr)) + geom_line()
roc_curve_test <- ggplot(data.frame(fpr = c(0, 1), tpr = c(0, auc_test)), aes(x = fpr, y = tpr)) + geom_line()
# 结合两个图
roc_combined <- bind_rows(roc_curve_train, roc_curve_test) %>%
gather(key = "dataset", value = "score", fpr, tpr) %>%
ggplot(aes(x = fpr, y = score, color = dataset)) +
geom_line() +
labs(x = "False Positive Rate", y = "True Positive Rate") +
theme_minimal()
# 显示AUC值和图形
cat("Training set AUC: ", round(auc_train, 3), "\n")
cat("Testing set AUC: ", round(auc_test, 3), "\n")
print(roc_combined)
```
这里我们先划分了数据,然后训练了一个SVM模型。接着对训练集和测试集做预测,并计算各自的AUC值。最后,我们将这两个AUC值及对应的ROC曲线可视化。
阅读全文