# 导入第三方模块
import numpy as np
from sklearn import neighbors
import matplotlib.pyplot as plt
def KNN_valuechoise(X_tain, y_train, K_num):
# 设置待测试的不同k值
# K = np.arange(1,np.ceil(np.log2(Knowledge.shape[0])))
K = np.arange(1,K_num+1)
length = len(K)
# 构建空的列表,用于存储平均准确率
accuracy = []
for k in K:
# 使用10重交叉验证的方法,比对每一个k值下KNN模型的预测准确率
cv_result = model_selection.cross_val_score(neighbors.KNeighborsClassifier(n_neighbors = int(k), weights = 'distance'),
X_train, y_train, cv = 10, scoring='accuracy')
accuracy.append(cv_result.mean())
# 从k个平均准确率中挑选出最大值所对应的下标
arg_max = np.array(accuracy).argmax()
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制不同K值与平均预测准确率之间的折线图
plt.plot(K, accuracy)
# 添加点图
plt.scatter(K, accuracy)
# 添加文字说明
plt.text(K[arg_max], accuracy[arg_max], '最佳k值为%s' %int(K[arg_max]))
plt.xticks(np.arange(K_num+1), np.arange(K_num+1))
# 显示图形
plt.show()
KNN_valuechoise(X_train, y_train, 10)#输入原始训练数据和取值范围
调参小技巧-KNN算法K值图像选取法
最新推荐文章于 2023-03-05 22:25:47 发布