返回

R 语言机器学习之 KNN(下):交叉验证与 k 值优化

前端

 

来吧,让我们继续我们激动人心的 R 语言机器学习之旅,深入探讨 K 最近邻 (KNN) 算法。在上期中,我们揭开了 KNN 的神秘面纱,但有一个挥之不去的问题:如何评估我们的模型在真实世界中的表现?

**交叉验证:评估模型性能的救星** 

使用训练数据来评估模型性能就像让学生做自己的考试——这不是一个公平的考验!为了解决这个问题,我们求助于交叉验证,一种将数据拆分成多个子集的巧妙技术。

我们首先将数据随机分成 k 个相等的部分,称为“折”(folds)。然后,我们依次将每个折留作测试集,而将其余的折组合成训练集。使用训练集,我们训练模型并对其进行预测。然后,我们比较预测与实际值,计算模型在测试集上的性能指标(例如准确率)。

通过对所有 k 个折执行此过程,我们可以获得模型性能的更可靠估计。为什么?因为每个数据点都有一次成为测试集的机会,因此我们的评估不受任何特定数据子集的偏见影响。

**选择最优 k:KNN 的甜蜜点** 

KNN 算法的一个关键超参数是 k,即要考虑的邻居数。选择最佳 k 至关重要,它会极大地影响模型的性能。

一种选择 k 的方法是使用交叉验证。我们尝试不同的 k 值,选择在交叉验证中产生最佳性能指标的那个。这就像尝试不同的食谱,找到最美味的那个!

**代码时间:让 R 展示它的魔力** 

我们已经掌握了理论,现在让我们用 R 代码来实际操作吧:

```R
# 加载数据
data <- read.csv("iris.csv")

# 定义 k 值范围
k_values <- seq(1, 10)

# 进行交叉验证
cv_results <- caret::train(Species ~ ., data = data, method = "knn",
                            preProcess = c("center", "scale"),
                            tuneLength = 10,
                            trControl = trainControl(method = "cv", number = 10))

# 选择最佳 k 值
best_k <- cv_results$bestTune

# 训练最终模型
model <- knn(Species ~ ., data = data, k = best_k)

结语:走向机器学习大师之路

现在,您已经掌握了交叉验证和 k 值优化这两个强大的技术。通过应用这些技术,您将能够更准确地评估和改进您的机器学习模型。

记住,机器学习是一个不断学习和完善的过程。随着您继续探索 R 语言的无限潜力,您将不断解锁新的见解和发现。让我们共同踏上机器学习大师之路,不断提高我们的技能并迎接未来的挑战!

补充材料