调参小技巧-KNN算法K值图像选取法

# 导入第三方模块
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)#输入原始训练数据和取值范围

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值