人工智能 - K近邻分类算法的Python实现

人工智能 - K近邻分类算法的Python实现

KNN算法

KNN的全称是K Nearest Neighbors。K个最近邻居,K的取值肯定是至关重要的。 KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
举个例子:
如果K=3,绿色圆将被分类为红色三角形。
如果K=5,绿色圆被分类为蓝色四方形类。
在这里插入图片描述

欧拉距离计算方程:

在这里插入图片描述

实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
处理txt文件容易读取,所以这里是选择txt文件。如:
在这里插入图片描述

在这里插入图片描述

代码:

import math
# global k
# k = int(input("输入k "))
def solve(s1,p):
    tran = open("iris-data-training.txt")
    t = tran.readlines()
    disty = []
    for j in t:
        t1 = j.rstrip().split("\t")  # 每个训练花的数据
        sum = 0
        for l in range(4):
            sum += pow(float(t1[l]) - float(s1[l]), 2)
        dis = math.sqrt(sum)
        disty.append((dis, int(t1[4])))
    res = sorted(disty, key=lambda disty: disty[0])
    typec = [0, 0, 0, 0]
    for n in range(p):
        typec[res[n][1]] += 1

    return  typec.index(max(typec))
def main(ko):
    with open("iris-data-testing.txt") as test:
        s = test.readlines()
        count = 0
        for i in s:
            s1 = i.rstrip().split("\t")  # 每个测试花的数据
            tpye = solve(s1,ko)  # 返回投票后类型
            if (tpye == int(s1[4])):
                count += 1
        print("k值为{},正确率为:{}".format(ko,float(count / 31)))
        ans = float(count / 31)
        vatr.append((ko,ans))
        aes = sorted(vatr, key=lambda vatr: vatr[1])
        if(ko == 120):
            print("k为{}时,正确率最高为{}".format(aes[119][0],aes[119][1]))
if __name__ == "__main__":
    vatr = []
    for i in range(1,121):
        main(i)

结果:

在这里插入图片描述
输出了1–120的k值,发现49时正确率最高即识别出正确结果。
注释掉的代码也可以手动输入K值计算正确率,但是没有输出全部的k值及结果更加明显。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值