日常练习,题目如下:
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))