如何选择KNN的最合适的K值

如何选择KNN的最合适的K值使⽤K折交叉验证评估最合适的K值
交叉验证是⼀个调参的过程,需要对提前给定的K值逐个去尝试,所以花费时间较长
交叉验证的第⼀步:把训练数据进⼀步分成训练集和验证集。
问:为什么不⽤测试集对模型进⾏验证和评估,⽽要拆分训练集呢?
答:测试数据是⽤来⼀次性测试的,⼀般⽤于项⽬上线时测试使⽤,⽽不能⽤于指导模型训练⼯作流程:
1. 将数据集分成K(折)段,并将每段拆分成训练集和验证集
2. 遍历所有指定的K(KNN)值对每段进⾏KNN模型训练
3. 将每段评估的准确率进⾏相加,并除以K(折),得出KNN模型为某K值时的最终准确率
4. 最终⽐较所有K(KNN)值的最终准确率,最⾼说明是这⼏个K(KNN)值中最合适的
现在开始使⽤K折交叉验证来挑选最合适的K值
导⼊相关库或模块
from sklearn import datasets
del_selection import KFold
ighbors import KNeighborsClassifier
导⼊iris数据集
iris = datasets.load_iris()
# X 为特征集,y 为标签集
X = iris['data']
y = iris['target']
然后开始写重要部分
# 这⾥定义6个候选值
fs =[1,3,5,7,9,11]
# 进⾏4折交叉验证,返回的是训练集和验证集的下标
fk = KFsold(n_splits=4, random_state=2001, shuffle=True)
# 先默认当前最好的k值
best_k = fs[0]
网络服务商# 先默认最好的准确率值
best_score =0
# 遍历所有的候选值
for k in fs:
# 记录五段的准确率之和
curr_score =0防老剂a
# 遍历五段的数据集
for train_index,valid_index in fk.split(X):
VAGUA# 实例化KNN模型
clf = KNeighborsClassifier(n_neighbors=k)
# 训练模型
clf.fit(X[train_index], y[train_index])
go to the goal# 计算当前的准确率
curr_score = curr_score + clf.score(X[valid_index], y[valid_index])
# 计算KNN模型的K值为k时的平均准确率值
avg_score = curr_score/4
print('平均准确率为:%.2f'% avg_score)
# 判断平均准确率值是否⼤于⽬前最好的准确率值
if avg_score > best_score:
# 将平均准确率值替代原先最好的准确率值
best_score = avg_score
# 将⽬前的K值替换原先最好的K值
best_k = k
print('⽬前最好的K值为:%d'%best_k,"⽬前最好的准确率值为:%.2f"%best_score) print("*"*50)
print('评估最合适的K值为:%d'%best_k,"其准确率为:%.2f"%best_score)
结果如下
第十届全运会还有⼀种更简单的⽅式:直接使⽤sklearn来实现
# 使⽤⽹格来搜索候选值
del_selection import GridSearchCV
from sklearn import datasets
ighbors import KNeighborsClassifier
iris = datasets.load_iris()
X = iris['data']
y = iris['target']
甲苯二异氰酸酯
parameter ={'n_neighbors':[1,3,5,7,9,11]}
knn = KNeighborsClassifier()
clf = GridSearchCV(knn,parameter,cv=5)
clf.fit(X,y)
print(f'评估最合适的K值为:{(clf.best_params_)["n_neighbors"]}',"其准确率为:%.2f"%clf.best_score_)效果如下
你学会了吗?

本文发布于:2024-09-23 05:30:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/326083.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:准确率   验证   训练   模型   交叉   评估   候选
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议