KNN测试算法

在学习机器学习实战一书中的KNN算法中发现KNN算法没有对应的关于不同k值的测试算法,所以在学习完这一章后,自己尝试写了一下测试算法。
该算法选择数据集中的90%数据作为训练集,剩余的10%的数据作为测试集,测试在KNN算法取不同的k值时错误率的变化情况。
以下为代码段:

def knn_test(dataset, dataset_labels, number):  # KNN算法测试函数
    m = shape(dataset)[0]  # 获取测试集的数据数目
    rate = 0.10
    testnum = int(m * rate)
    print(testnum)
    k = 1  # 初始化k为1
    dataset_normal, dataset_ranges, dataset_min = autoNorm(dataset)  # 对测试集进行归一化
    error = 0  # 记录错误次数
    error_rate = 0.0  # 记录错误率
    result_list = {}  # 创建字典记录不同的k值对应的错误率
    while k <= number:
        for i in range(testnum):
            predict_class = classify0(14[i, :], dataset_normal[testnum:m, :], dataset_labels[testnum:m], k)
            if predict_class != dataset_labels[i]:
                error += 1
        error_rate = error / testnum
        # print(error_rate)
        print(error)
        result_list[k] = error_rate
        k += 1
        error = 0
    return result_list

以下为输出结果(本例中选择的k值范围从1到30)

print(knn_test(datingDataMat, datingLabels, number=30))  # number参数控制k取到的最大值
{1: 0.08, 2: 0.08, 3: 0.05, 4: 0.04, 5: 0.05, 6: 0.05, 7: 0.04, 8: 0.05, 9: 0.05, 10: 0.06, 11: 0.06, 12: 0.06, 13: 0.06, 14: 0.06, 15: 0.06, 16: 0.06, 17: 0.06, 18: 0.06, 19: 0.06, 20: 0.06, 21: 0.06, 22: 0.06, 23: 0.06, 24: 0.06, 25: 0.06, 26: 0.06, 27: 0.06, 28: 0.06, 29: 0.06, 30: 0.06}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值