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

如何找出训练/测试数据集中使分数最高的KNN邻居数?

用GridSearch找KNN的最优邻居数

你现在的代码只是固定某个k值跑一次预测,没法自动找出能让分数最高的邻居数。要实现这个,得用GridSearchCV遍历不同的k值,结合交叉验证选出最优解,步骤如下:

  • 先导入必要的库:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
  • 定义KNN模型和要搜索的参数网格:
    可以把邻居数的候选值设成1到20的奇数(KNN常用奇数避免平局),你也可以根据数据集调整范围:
# 初始化KNN模型
knn = KNeighborsClassifier()

# 定义参数网格,键要和模型的参数名一致
param_grid = {'n_neighbors': [1,3,5,7,9,11,13,15,17,19]}
  • 初始化GridSearchCV,设置交叉验证折数(比如cv=5,即5折交叉验证):
grid_search = GridSearchCV(estimator=knn, param_grid=param_grid, cv=5, scoring='accuracy')
  • 拟合训练数据,自动搜索最优参数:
grid_search.fit(X_train, y_train)
  • 查看最优结果:
# 输出最优邻居数
print(f"最优邻居数: {grid_search.best_params_['n_neighbors']}")
# 输出交叉验证得到的最高准确率
print(f"交叉验证最高准确率: {grid_search.best_score_}")
  • 用最优模型预测测试集,计算最终准确率:
y_pred = grid_search.predict(X_test)
print(f"测试集准确率: {accuracy_score(y_test, y_pred)}")

这样就能自动找出让模型分数最高的邻居数,交叉验证还能避免过拟合,比单次测试更可靠。

内容的提问来源于stack exchange,提问作者Patricia Miranda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:10:51