手写KNN底层代码实现

日常练习,题目如下:

1.加载数据

T = [[3, 104, -1], [2, 100, -1], [1, 81, -1],[101, 10, 1],[99, 5, 1],[98, 2, 1]]带检测样本是待测样本x = [18, 90]将以上数据部分写入代码并且初始化超参数邻居数量为5

2.算距离

3.排序

4.生成一个空字典

5.对类别进行投票,并且保存在字典中

6.求票数最高的类别

实现需要用到的包:

from math import sqrt

代码实现如下:


from math import sqrt

# 1.加载数据
# T = [[3, 104, -1], [2, 100, -1], [1, 81, -1],[101, 10, 1],[99, 5, 1],[98, 2, 1]]
# 带检测样本是待测样本x = [18, 90]将以上数据部分写入代码并且初始化超参数邻居数量为5
T = [
    [3, 104, -1],
    [2, 100, -1],
    [1, 81, -1],
    [101, 10, 1],
    [99, 5, 1],
    [98, 2, 1]]
x = [18, 90]  # 要预测的样本值
K = 5
# 2算距离
dis = []
for i in T:
    d = sqrt((x[0] - i[0]) ** 2 + (x[1] - i[1]) ** 2)  # 欧式距离
    dis.append([d, i[2]])

# 3排序
dis.sort(key=lambda n: n[0])

# 4生成一个空字典
count = {}
# 5对类别进行投票,并且保存在字典中
for i in dis[0:K]:
    # print(count.get(i[1]))
    if count.get(i[1]) == None:  # 判断字典中有没有i[1]这个键 None--->表示的没有
        count[i[1]] = 1  # 字典的赋值
        # print(count[i[1]])
    else:
        count[i[1]] += 1
# 6求票数最高的类别
max_key = max(count, key=count.get)
print('预测点结果为', max_key)

if __name__ == '__main__':
    l = [[18.867962264113206, -1], [19.235384061671343, -1], [20.518284528683193, -1], [115.27792503337315, 1],
         [117.41379816699569, 1], [118.92854997854805, 1]]

    dic = {} # 键是什么,值是什么 键---->标签   值----->这个标签出现的个数
    # print(dic.keys())
    print("-"*20)
    print(dic.get(1))
    # l1 = [-1, -1, -1, 1, 1]
    for i in l[0:5]:
        # print(i[1])
        if i[1] in dic.keys():
            dic[i[1]] += 1
        else:
            dic[i[1]] = 1
    # print(dic)
    print("-" * 20)
    print(dic.get(1))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值