一、算距离
flag = []
# 第一个参数训练样本集,第二个参数待判定的数据
def neighbor(k, array1, data):
for i in array1:
length = len(i)
count = 0
num = 0
while (num < length - 1):
count = count + (data[num] - i[num]) ** 2
num = num + 1
distance = math.sqrt(count)
flag.append([distance, i[length - 1]])
return sort(k, flag)
二、对距离进行排序
# 对距离进行排序
def sort(k, flag):
flag.sort(key=(lambda x: x[0]))
return test(k, flag)
三、依据k找邻居的个人,再依据邻居的类型判断待判断数据的类型
# 输入k,k代表邻居的数量,flag表示已经排序好的数据
def test(k, flag):
# 截取0到k
flag = flag[:k]
# 统计1,统计2
type1 = 0
type2 = 0
dic = dict(flag)
v1 = sum(value == 1 for value in dic.values())
v2 = sum(value == 2 for value in dic.values())
if(v1>v2):
return 1
else:
return 2
训练集:
# 1表示man,2表示woman
s = [[20, 5, 15, 2], [9, 18, 10, 1], [21, 10, 7, 1], [17, 13, 25, 1], [12, 21, 19, 1]]
print(neighbor(3, s, [25, 9, 13]))
返回结果是1,表示[25,9,13]的类型是man