You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中无需交叉验证利用验证集训练KNN模型并绘制误差图的方法

实现方案(无需交叉验证)

你已经提前拆分好了固定的训练/验证集,直接遍历k值分别计算对应误差即可,不需要引入交叉验证流程,以下是基于scikit-learn的可运行实现:

步骤1:导入依赖库

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

步骤2:遍历1~25的k值计算误差

# 定义k的取值范围
k_range = range(1, 26)
train_errors = []
val_errors = []

for k in k_range:
    # 初始化对应邻居数的KNN模型
    knn = KNeighborsClassifier(n_neighbors=k)
    # 仅用训练集拟合模型
    knn.fit(Xa, Ya)
    # 计算训练集分类误差
    y_pred_train = knn.predict(Xa)
    train_error = 1 - accuracy_score(Ya, y_pred_train)
    train_errors.append(train_error)
    # 计算验证集分类误差
    y_pred_val = knn.predict(Xv)
    val_error = 1 - accuracy_score(Yv, y_pred_val)
    val_errors.append(val_error)

步骤3:绘制训练/验证集误差对比图

plt.figure(figsize=(10,6))
# 绘制训练误差线
plt.plot(k_range, train_errors, label='训练集分类误差', marker='o')
# 绘制验证集误差线
plt.plot(k_range, val_errors, label='验证集分类误差', marker='s')
# 图表基础配置
plt.xlabel('KNN邻居数k')
plt.ylabel('分类误差')
plt.xticks(k_range)
plt.legend()
plt.grid(alpha=0.3)
plt.show()

补充说明

  • 分类误差默认用1-分类准确率计算,也可根据需求替换为其他分类损失指标
  • 全程仅使用你提前拆分好的固定训练/验证集,没有用到任何交叉验证逻辑
  • 跑完后可直接根据验证集误差最低点选择最优k值,最后再用测试集(Xt,Yt)做最终效果评估即可

内容的提问来源于stack exchange,提问作者Nadjib Rahmani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:15:06