资深博导:学生问为什么训练集要三七分?我懵了!

文摘   2024-08-06 09:01   爱尔兰  

数据科学中,数据集的拆分是建模的重要一部分。一个常见的问题是:该怎样决定数据拆分的比例很多学生只会从网上照抄代码,网上的代码有时候三七分,有时候二八分,当然会让初学者好奇这是为什么?今天我们将详细解答这个问题,并以支持向量机(SVM)算法为例,展示数据集拆分、建模、评价和可视化的完整过程。

数据集拆分的重要性

在机器学习中,我们通常将数据集拆分为训练集和测试集。训练集用于训练模型,而测试集用于评估模型的性能。常见的拆分比例有70:30、80:20等。选择合适的比例非常重要,因为它会影响模型的训练效果和泛化能力。

为什么选择70:30?

  • 训练效果:大多数情况下,70%的数据用于训练模型足以捕捉数据的模式。
  • 评估效果:30%的数据用于测试模型,可以有效评估模型的泛化能力。
  • 数据量:如果数据量较大,70:30的比例可以确保训练和测试集都有足够的数据。

支持向量机(SVM)分类模型示例

接下来,我们以R语言的“iris”数据集为例,使用SVM算法进行分类,并展示模型的评价和结果可视化。

步骤一:加载必要的包和数据

# 加载必要的包
library(caret)
library(e1071)
library(ggplot2)

# 设置随机种子以确保可重复性
set.seed(123)

# 加载数据集
data(iris)
X <- iris[, 1:4]
Y <- iris[, 5]

步骤二:数据集拆分为训练集和测试集

# 数据集拆分为训练集和测试集(70:30)
trainIndex <- createDataPartition(Y, p = 0.7, list = FALSE)
trainData <- X[trainIndex, ]
testData <- X[-trainIndex, ]
trainLabel <- Y[trainIndex]
testLabel <- Y[-trainIndex]

步骤三:构建支持向量机模型

# 构建支持向量机模型
svm_model <- svm(trainData, as.factor(trainLabel), kernel = "linear")

步骤四:预测测试集并评价模型

# 预测测试集
test_predictions <- predict(svm_model, newdata = testData)

# 模型评价
confusion_matrix <- table(Predicted = test_predictions, Actual = testLabel)
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)

cat("Confusion Matrix:\n")
## Confusion Matrix:
print(confusion_matrix)
##             Actual
## Predicted setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 15 1
## virginica 0 0 14
cat("\nAccuracy:", accuracy, "\n")
## 
## Accuracy: 0.9777778

步骤五:可视化预测结果

# 绘制预测结果的散点图

testData_with_labels <- data.frame(testData, Predicted = test_predictions, Actual = testLabel)


ggplot(testData_with_labels, aes(x = Petal.Length, y = Petal.Width, color = Actual, shape = Predicted)) +
geom_point(size = 3) +
theme_minimal() +
ggtitle("SVM Classification: Test Set Predictions vs Actual Labels") +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.title = element_text(size = 14, face = "bold"),
legend.title = element_text(size = 12, face = "bold"),
legend.position = "right"
) +
labs(
x = "Petal Length",
y = "Petal Width",
color = "Actual Species",
shape = "Predicted Species"
)

总结

在本文中,我们介绍了数据集拆分的重要性,并详细说明了为什么常用70:30的比例。通过支持向量机(SVM)分类模型的实例,我们展示了如何进行数据集拆分、模型构建、模型评价和结果可视化。希望大家对数据集拆分有更深入的理解。
感谢关注!

科研代码
专注R和Python的数据分析。
 最新文章